From ec859a60b806812c6683b62bccd56b394061272c Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 11 Feb 2018 17:17:29 +0100 Subject: [PATCH] New upstream version 5.6 --- Android/Application/AndroidManifest.xml | 2 +- Android/Application/mksettings | 8 +- Android/Application/newstrings | 8 +- Android/Application/project.properties | 1 + Android/Application/res/values-da/strings.xml | 222 +++ .../Application/res/values/settings_lists.xml | 9 + Android/Application/res/xml/usb_devices.xml | 11 +- .../a11y/brltty/android/ApplicationHooks.java | 8 +- .../brltty/android/ApplicationParameters.java | 8 +- .../brltty/android/ApplicationUtilities.java | 8 +- .../brltty/android/BluetoothConnection.java | 8 +- .../a11y/brltty/android/BrailleRenderer.java | 8 +- .../a11y/brltty/android/BrailleService.java | 8 +- .../org/a11y/brltty/android/CoreThread.java | 8 +- .../brltty/android/GridBrailleRenderer.java | 8 +- .../org/a11y/brltty/android/InputService.java | 8 +- .../brltty/android/LanguageUtilities.java | 8 +- .../brltty/android/ListBrailleRenderer.java | 8 +- .../a11y/brltty/android/LockUtilities.java | 8 +- .../org/a11y/brltty/android/PcmDevice.java | 8 +- .../brltty/android/RealScreenElement.java | 8 +- .../a11y/brltty/android/RenderedScreen.java | 8 +- .../org/a11y/brltty/android/ScreenDriver.java | 8 +- .../a11y/brltty/android/ScreenElement.java | 8 +- .../brltty/android/ScreenElementList.java | 8 +- .../org/a11y/brltty/android/ScreenLogger.java | 8 +- .../a11y/brltty/android/ScreenNodeTester.java | 8 +- .../a11y/brltty/android/ScreenTextEditor.java | 8 +- .../a11y/brltty/android/ScreenUtilities.java | 8 +- .../org/a11y/brltty/android/ScreenWindow.java | 8 +- .../a11y/brltty/android/SettingsActivity.java | 8 +- .../brltty/android/SingletonReference.java | 8 +- .../org/a11y/brltty/android/SpeechDriver.java | 8 +- .../org/a11y/brltty/android/StringMaker.java | 8 +- .../android/SystemServiceReference.java | 8 +- .../org/a11y/brltty/android/UsbHelper.java | 8 +- .../brltty/android/VirtualScreenElement.java | 8 +- Android/Core/Makefile | 8 +- .../a11y/brltty/core/ArgumentsBuilder.java | 8 +- .../src/org/a11y/brltty/core/CoreWrapper.java | 8 +- .../src/org/a11y/brltty/core/LogLevel.java | 8 +- .../a11y/brltty/core/ProgramExitStatus.java | 8 +- Android/TRANSLATORS | 1 + Autostart/AppStream/Makefile.in | 30 + .../AppStream/org.a11y.brltty.metainfo.xml | 13 +- Autostart/AppStream/reldeps.mk | 0 Autostart/Hotplug/brltty | 8 +- Autostart/Hotplug/brltty.usermap | 19 +- Autostart/Systemd/Makefile.in | 13 +- Autostart/Systemd/brltty-systemd-wrapper | 27 +- .../Systemd/{brltty.target => brltty.path} | 12 +- .../Systemd/{brltty@.target => brltty@.path} | 12 +- Autostart/Systemd/brltty@.service.in | 8 +- Autostart/Udev/Makefile.in | 11 +- Autostart/Udev/brltty-wrapper | 8 +- Autostart/Udev/rules | 19 +- Autostart/Windows/brltty-libusb-1.0.inf | 20 +- Autostart/Windows/brltty-libusb.inf | 30 +- Bindings/Java/Brlapi.java | 2 +- Bindings/Java/ConnectionSettings.java | 2 +- Bindings/Java/DisplaySize.java | 2 +- Bindings/Java/Error.java | 2 +- Bindings/Java/Exception.java | 2 +- Bindings/Java/Key.java | 2 +- Bindings/Java/Makefile.in | 2 +- Bindings/Java/Native.java | 3 +- Bindings/Java/Test.java | 5 +- Bindings/Java/WriteArguments.java | 2 +- Bindings/Java/apitest | 12 +- Bindings/Java/bindings.c | 17 +- Bindings/Java/bindings.m4 | 2 +- Bindings/Java/constants.awk | 2 +- Bindings/Lisp/Makefile.in | 2 +- Bindings/Lisp/apisetup.lisp | 28 + Bindings/Lisp/apitest | 21 + Bindings/Lisp/apitest.lisp | 75 + Bindings/Lisp/bindings.m4 | 2 +- Bindings/Lisp/brlapi.asd | 2 +- Bindings/Lisp/brlapi.lisp.in | 138 +- Bindings/OCaml/Makefile.in | 8 +- Bindings/OCaml/brlapi_stubs.c | 2 +- Bindings/OCaml/constants.awk | 8 +- Bindings/OCaml/main.ml | 2 +- Bindings/OCaml/main.mli | 2 +- Bindings/Python/Makefile.in | 2 +- Bindings/Python/apitest | 21 + Bindings/Python/apitest.py | 10 +- Bindings/Python/bindings.c | 2 +- Bindings/Python/bindings.h | 2 +- Bindings/Python/bindings.m4 | 12 +- Bindings/Python/brlapi.pyx | 15 +- Bindings/Python/c_brlapi.pxd | 3 +- Bindings/Python/constants.awk | 2 +- Bindings/Python/mkdoc.py | 2 +- Bindings/Python/setup.py.in | 2 +- Bindings/Tcl/Makefile.in | 2 +- Bindings/Tcl/apitest | 12 +- Bindings/Tcl/apitest.tcl | 5 +- Bindings/Tcl/bindings.c | 30 +- Bindings/Tcl/bindings.m4 | 2 +- Bindings/Tcl/prologue.tcl | 2 +- Bootdisks/bp2cf | 8 +- Bootdisks/rhmkiso | 8 +- DOS/mkdosarc | 8 +- DOS/mkdostools | 8 +- Documents/BrlAPIref.doxy.in | 12 - Documents/BrlAPIref/html/brlapi_8h.html | 30 +- .../BrlAPIref/html/brlapi_8h_source.html | 884 ++++----- .../html/brlapi__constants_8h_source.html | 2 +- .../html/brlapi__keycodes_8h_source.html | 2 +- .../BrlAPIref/html/brlapi__protocol_8h.html | 2 + .../html/brlapi__protocol_8h_source.html | 181 +- Documents/BrlAPIref/html/globals.html | 23 +- Documents/BrlAPIref/html/globals_defs.html | 9 + Documents/BrlAPIref/html/globals_func.html | 14 +- .../html/group__brlapi__connection.html | 32 +- .../BrlAPIref/html/group__brlapi__info.html | 78 +- .../BrlAPIref/html/group__brlapi__keys.html | 32 +- .../html/group__brlapi__protocol.html | 16 +- .../html/group__brlapi__version.html | 8 +- .../BrlAPIref/html/group__brlapi__write.html | 2 +- .../man/man3/BRLAPI_DEFAUTH_KEYFILE.3 | 1 + .../man/man3/BRLAPI_DEFAUTH_POLKIT.3 | 1 + .../man/man3/BRLAPI_PACKET_GETMODELID.3 | 1 + ... _tmp_mktar.Mu3gIQ_brltty-5.6_Programs_.3} | 2 +- Documents/BrlAPIref/man/man3/brlapi.h.3 | 28 +- .../man/man3/brlapi__getModelIdentifier.3 | 1 + .../man/man3/brlapi_authClientPacket_t.3 | 2 +- .../man/man3/brlapi_authServerPacket_t.3 | 2 +- .../BrlAPIref/man/man3/brlapi_connection.3 | 16 +- .../man/man3/brlapi_connectionSettings_t.3 | 2 +- .../BrlAPIref/man/man3/brlapi_constants.h.3 | 2 +- .../BrlAPIref/man/man3/brlapi_deprecated.3 | 2 +- .../man/man3/brlapi_describedKeyCode_t.3 | 2 +- .../man/man3/brlapi_driverspecific.3 | 2 +- Documents/BrlAPIref/man/man3/brlapi_error.3 | 2 +- .../BrlAPIref/man/man3/brlapi_errorPacket_t.3 | 2 +- Documents/BrlAPIref/man/man3/brlapi_error_t.3 | 2 +- .../man/man3/brlapi_expandedKeyCode_t.3 | 2 +- .../brlapi_getDriverSpecificModePacket_t.3 | 2 +- .../man/man3/brlapi_getModelIdentifier.3 | 1 + Documents/BrlAPIref/man/man3/brlapi_handles.3 | 2 +- .../BrlAPIref/man/man3/brlapi_header_t.3 | 2 +- Documents/BrlAPIref/man/man3/brlapi_info.3 | 34 +- .../BrlAPIref/man/man3/brlapi_keycodes.3 | 2 +- .../BrlAPIref/man/man3/brlapi_keycodes.h.3 | 2 +- Documents/BrlAPIref/man/man3/brlapi_keys.3 | 18 +- .../BrlAPIref/man/man3/brlapi_packet_t.3 | 2 +- .../BrlAPIref/man/man3/brlapi_protocol.3 | 9 +- .../BrlAPIref/man/man3/brlapi_protocol.h.3 | 5 +- Documents/BrlAPIref/man/man3/brlapi_range_t.3 | 2 +- Documents/BrlAPIref/man/man3/brlapi_tty.3 | 2 +- Documents/BrlAPIref/man/man3/brlapi_version.3 | 10 +- .../man/man3/brlapi_versionPacket_t.3 | 2 +- Documents/BrlAPIref/man/man3/brlapi_write.3 | 4 +- .../man/man3/brlapi_writeArgumentsPacket_t.3 | 2 +- .../man/man3/brlapi_writeArguments_t.3 | 2 +- .../BrlAPIref/man/man3/brlapi_writeStruct.3 | 2 +- Documents/CONTRIBUTORS | 11 +- Documents/ChangeLog | 49 + Documents/Makefile.in | 8 +- Documents/Manual-BRLTTY/English/BRLTTY-1.html | 6 +- .../Manual-BRLTTY/English/BRLTTY-10.html | 1 + Documents/Manual-BRLTTY/English/BRLTTY-6.html | 2 + Documents/Manual-BRLTTY/English/BRLTTY-8.html | 5 +- Documents/Manual-BRLTTY/English/BRLTTY.html | 4 +- Documents/Manual-BRLTTY/English/BRLTTY.sgml | 10 +- Documents/Manual-BRLTTY/English/BRLTTY.txt | 20 +- Documents/Manual-BRLTTY/English/Makefile.in | 8 +- .../English/braille-drivers.sgml | 6 +- .../English/contraction-tables.sgml | 1 + .../Manual-BRLTTY/English/driver-codes.sgml | 1 + .../Manual-BRLTTY/English/text-tables.sgml | 1 + Documents/Manual-BRLTTY/French/BRLTTY-1.html | 6 +- Documents/Manual-BRLTTY/French/BRLTTY-10.html | 3 + Documents/Manual-BRLTTY/French/BRLTTY-6.html | 5 +- Documents/Manual-BRLTTY/French/BRLTTY-8.html | 5 +- Documents/Manual-BRLTTY/French/BRLTTY.html | 4 +- Documents/Manual-BRLTTY/French/BRLTTY.sgml | 10 +- Documents/Manual-BRLTTY/French/BRLTTY.txt | 29 +- Documents/Manual-BRLTTY/French/Makefile.in | 8 +- .../Manual-BRLTTY/French/braille-drivers.sgml | 6 +- .../French/contraction-tables.sgml | 1 + .../Manual-BRLTTY/French/driver-codes.sgml | 3 + .../Manual-BRLTTY/French/text-tables.sgml | 4 +- Documents/Manual-BrlAPI/English/BrlAPI-7.html | 15 +- Documents/Manual-BrlAPI/English/BrlAPI.sgml | 15 +- Documents/Manual-BrlAPI/English/BrlAPI.txt | 27 +- Documents/Manual-BrlAPI/English/Makefile.in | 8 +- Documents/README.Systemd | 24 +- Documents/braille-driver.csv | 1 + Documents/brltty.1.in | 13 +- Documents/brltty.conf.in | 11 +- Documents/contraction-table.csv | 1 + Documents/mkcsvs | 8 +- Documents/text-table.csv | 1 + Documents/xbrlapi.1 | 2 +- Drivers/Braille/Albatross/Makefile.in | 8 +- Drivers/Braille/Albatross/braille.c | 14 +- Drivers/Braille/Albatross/brldefs-at.h | 2 +- Drivers/Braille/Alva/Makefile.in | 8 +- Drivers/Braille/Alva/braille.c | 12 +- Drivers/Braille/Alva/braille.h | 8 +- Drivers/Braille/Alva/brldefs-al.h | 2 +- Drivers/Braille/B2G/Makefile.in | 8 +- Drivers/Braille/B2G/braille.c | 8 +- Drivers/Braille/B2G/brldefs-bg.h | 2 +- Drivers/Braille/Baum/Makefile.in | 8 +- Drivers/Braille/Baum/braille.c | 12 +- Drivers/Braille/Baum/brldefs-bm.h | 2 +- Drivers/Braille/BrailComm/Makefile.in | 8 +- Drivers/Braille/BrailComm/braille.c | 12 +- Drivers/Braille/BrailComm/brl-out.h | 8 +- Drivers/Braille/BrailleLite/Makefile.in | 8 +- Drivers/Braille/BrailleLite/bindings.h | 8 +- Drivers/Braille/BrailleLite/braille.c | 12 +- Drivers/Braille/BrailleLite/braille.h | 8 +- Drivers/Braille/BrailleMemo/Makefile.in | 8 +- Drivers/Braille/BrailleMemo/braille.c | 8 +- Drivers/Braille/BrailleMemo/brldefs-mm.h | 2 +- Drivers/Braille/BrailleNote/Makefile.in | 8 +- Drivers/Braille/BrailleNote/braille.c | 8 +- Drivers/Braille/BrailleNote/brldefs-bn.h | 2 +- Drivers/Braille/Braudi/Makefile.in | 8 +- Drivers/Braille/Braudi/braille.c | 12 +- Drivers/Braille/BrlAPI/Makefile.in | 8 +- Drivers/Braille/BrlAPI/braille.c | 8 +- Drivers/Braille/Cebra/Makefile.in | 8 +- Drivers/Braille/Cebra/braille.c | 8 +- Drivers/Braille/Cebra/brldefs-ce.h | 2 +- Drivers/Braille/CombiBraille/Makefile.in | 8 +- Drivers/Braille/CombiBraille/README | 4 +- Drivers/Braille/CombiBraille/braille.c | 12 +- Drivers/Braille/CombiBraille/braille.h | 8 +- Drivers/Braille/CombiBraille/brldefs-cb.h | 2 +- Drivers/Braille/EcoBraille/LEEME | 5 +- Drivers/Braille/EcoBraille/Makefile.in | 8 +- Drivers/Braille/EcoBraille/README | 6 +- Drivers/Braille/EcoBraille/braille.c | 14 +- Drivers/Braille/EcoBraille/braille.h | 8 +- Drivers/Braille/EuroBraille/Makefile.in | 10 +- Drivers/Braille/EuroBraille/README | 4 +- Drivers/Braille/EuroBraille/brldefs-eu.h | 2 +- Drivers/Braille/EuroBraille/eu_braille.c | 8 +- Drivers/Braille/EuroBraille/eu_clio.c | 8 +- Drivers/Braille/EuroBraille/eu_esysiris.c | 76 +- Drivers/Braille/EuroBraille/eu_protocol.h | 8 +- Drivers/Braille/EuroBraille/eu_protocoldef.h | 178 ++ Drivers/Braille/EuroBraille/reldeps.mk | 1 + Drivers/Braille/FreedomScientific/Makefile.in | 8 +- Drivers/Braille/FreedomScientific/braille.c | 10 +- .../Braille/FreedomScientific/brldefs-fs.h | 2 +- Drivers/Braille/HIMS/Makefile.in | 8 +- Drivers/Braille/HIMS/braille.c | 8 +- Drivers/Braille/HIMS/brldefs-hm.h | 2 +- Drivers/Braille/HandyTech/Makefile.in | 8 +- Drivers/Braille/HandyTech/braille.c | 10 +- Drivers/Braille/HandyTech/brldefs-ht.h | 2 +- Drivers/Braille/Hedo/Makefile.in | 8 +- Drivers/Braille/Hedo/braille.c | 8 +- Drivers/Braille/Hedo/brldefs-hd.h | 2 +- Drivers/Braille/HumanWare/Makefile.in | 10 +- Drivers/Braille/HumanWare/braille.c | 249 ++- Drivers/Braille/HumanWare/brldefs-hw.h | 12 +- Drivers/Braille/Inceptor/Makefile.in | 28 + Drivers/Braille/Inceptor/braille.c | 372 ++++ Drivers/Braille/Inceptor/brldefs-ic.h | 61 + Drivers/Braille/Inceptor/reldeps.mk | 26 + Drivers/Braille/Iris/Makefile.in | 8 +- Drivers/Braille/Iris/braille.c | 10 +- Drivers/Braille/Iris/brldefs-ir.h | 2 +- Drivers/Braille/Libbraille/Makefile.in | 8 +- Drivers/Braille/Libbraille/braille.c | 8 +- Drivers/Braille/LogText/Makefile.in | 8 +- Drivers/Braille/LogText/braille.c | 12 +- Drivers/Braille/LogText/braille.h | 8 +- Drivers/Braille/LogText/brl-out.h | 8 +- Drivers/Braille/MDV/Makefile.in | 8 +- Drivers/Braille/MDV/braille.c | 8 +- Drivers/Braille/MDV/brldefs-md.h | 2 +- Drivers/Braille/Metec/Makefile.in | 8 +- Drivers/Braille/Metec/braille.c | 10 +- Drivers/Braille/Metec/brldefs-mt.h | 2 +- Drivers/Braille/MiniBraille/Makefile.in | 8 +- Drivers/Braille/MiniBraille/braille.c | 12 +- Drivers/Braille/MultiBraille/Makefile.in | 8 +- Drivers/Braille/MultiBraille/README | 4 +- Drivers/Braille/MultiBraille/braille.c | 12 +- Drivers/Braille/MultiBraille/braille.h | 8 +- Drivers/Braille/MultiBraille/tables.h | 8 +- Drivers/Braille/NinePoint/Makefile.in | 8 +- Drivers/Braille/NinePoint/braille.c | 8 +- Drivers/Braille/NinePoint/brldefs-np.h | 2 +- Drivers/Braille/Papenmeier/Makefile.in | 8 +- Drivers/Braille/Papenmeier/README | 6 +- Drivers/Braille/Papenmeier/braille.c | 8 +- Drivers/Braille/Papenmeier/brldefs-pm.h | 2 +- Drivers/Braille/Papenmeier/models.h | 8 +- Drivers/Braille/Pegasus/Makefile.in | 8 +- Drivers/Braille/Pegasus/braille.c | 14 +- Drivers/Braille/Pegasus/brldefs-pg.h | 2 +- Drivers/Braille/Seika/Makefile.in | 8 +- Drivers/Braille/Seika/braille.c | 8 +- Drivers/Braille/Seika/brldefs-sk.h | 2 +- Drivers/Braille/Skeleton/Makefile.in | 8 +- Drivers/Braille/Skeleton/braille.c | 8 +- Drivers/Braille/Skeleton/brldefs-xx.h | 2 +- Drivers/Braille/TSI/Makefile.in | 8 +- Drivers/Braille/TSI/braille.c | 8 +- Drivers/Braille/TSI/braille.h | 8 +- Drivers/Braille/TSI/brldefs-ts.h | 2 +- Drivers/Braille/TTY/Makefile.in | 8 +- Drivers/Braille/TTY/braille.c | 12 +- Drivers/Braille/TTY/braille.h | 8 +- Drivers/Braille/TechniBraille/Makefile.in | 8 +- Drivers/Braille/TechniBraille/braille.c | 12 +- Drivers/Braille/VideoBraille/Makefile.in | 8 +- Drivers/Braille/VideoBraille/braille.c | 8 +- Drivers/Braille/VideoBraille/braille.h | 8 +- Drivers/Braille/Virtual/Makefile.in | 8 +- Drivers/Braille/Virtual/braille.c | 15 +- Drivers/Braille/Virtual/braille.h | 8 +- Drivers/Braille/Virtual/reldeps.mk | 1 - Drivers/Braille/VisioBraille/Makefile.in | 8 +- Drivers/Braille/VisioBraille/braille.c | 12 +- Drivers/Braille/VisioBraille/braille.h | 8 +- Drivers/Braille/VisioBraille/brl-out.h | 8 +- Drivers/Braille/VisioBraille/brldefs-vs.h | 2 +- Drivers/Braille/VisioBraille/vstp.h | 2 +- Drivers/Braille/VisioBraille/vstp_main.c | 2 +- Drivers/Braille/VisioBraille/vstp_transfer.c | 2 +- Drivers/Braille/Voyager/Makefile.in | 8 +- Drivers/Braille/Voyager/braille.c | 8 +- Drivers/Braille/Voyager/brldefs-vo.h | 2 +- Drivers/Braille/XWindow/Makefile.in | 8 +- Drivers/Braille/XWindow/README | 48 +- Drivers/Braille/XWindow/braille.c | 10 +- Drivers/Braille/XWindow/braille.h | 8 +- Drivers/BrlAPI/WindowEyes/Makefile.in | 8 +- Drivers/BrlAPI/WindowEyes/test.c | 8 +- Drivers/BrlAPI/WindowEyes/webrloem.c | 2 +- Drivers/BrlAPI/WindowEyes/webrloem.h | 2 +- Drivers/Screen/Android/Makefile.in | 8 +- Drivers/Screen/Android/screen.c | 8 +- Drivers/Screen/AtSpi/Makefile.in | 8 +- Drivers/Screen/AtSpi/screen.c | 8 +- Drivers/Screen/AtSpi2/Makefile.in | 8 +- Drivers/Screen/AtSpi2/screen.c | 28 +- Drivers/Screen/Grub/Makefile.in | 8 +- Drivers/Screen/Grub/screen.c | 8 +- Drivers/Screen/Hurd/Makefile.in | 8 +- Drivers/Screen/Hurd/screen.c | 8 +- Drivers/Screen/Hurd/screen.h | 8 +- Drivers/Screen/Linux/Makefile.in | 8 +- Drivers/Screen/Linux/screen.c | 8 +- Drivers/Screen/Linux/screen.h | 8 +- Drivers/Screen/PcBios/Makefile.in | 8 +- Drivers/Screen/PcBios/screen.c | 8 +- Drivers/Screen/Screen/Makefile.in | 8 +- Drivers/Screen/Screen/screen.c | 8 +- Drivers/Screen/Screen/screen.h | 8 +- Drivers/Screen/Skeleton/Makefile.in | 8 +- Drivers/Screen/Skeleton/screen.c | 8 +- Drivers/Screen/Windows/Makefile.in | 8 +- Drivers/Screen/Windows/screen.c | 8 +- Drivers/Speech/Alva/Makefile.in | 8 +- Drivers/Speech/Alva/speech.c | 8 +- Drivers/Speech/Alva/speech.h | 8 +- Drivers/Speech/Android/Makefile.in | 8 +- Drivers/Speech/Android/speech.c | 8 +- Drivers/Speech/BrailleLite/Makefile.in | 8 +- Drivers/Speech/BrailleLite/speech.c | 8 +- Drivers/Speech/BrailleLite/speech.h | 8 +- Drivers/Speech/CombiBraille/Makefile.in | 8 +- Drivers/Speech/CombiBraille/speech.c | 8 +- Drivers/Speech/CombiBraille/speech.h | 8 +- Drivers/Speech/ExternalSpeech/Makefile.in | 8 +- Drivers/Speech/ExternalSpeech/speech.c | 8 +- Drivers/Speech/ExternalSpeech/speech.h | 8 +- Drivers/Speech/Festival/Makefile.in | 8 +- Drivers/Speech/Festival/speech.c | 8 +- Drivers/Speech/Festival/speech.h | 8 +- Drivers/Speech/FestivalLite/Makefile.in | 8 +- Drivers/Speech/FestivalLite/speech.c | 8 +- Drivers/Speech/GenericSay/Makefile.in | 8 +- Drivers/Speech/GenericSay/commands/AccentSA | 8 +- Drivers/Speech/GenericSay/commands/say | 8 +- Drivers/Speech/GenericSay/speech.c | 8 +- Drivers/Speech/GenericSay/speech.h | 8 +- Drivers/Speech/Mikropuhe/Makefile.in | 8 +- Drivers/Speech/Mikropuhe/speech.c | 8 +- Drivers/Speech/MultiBraille/Makefile.in | 8 +- Drivers/Speech/MultiBraille/speech.c | 8 +- Drivers/Speech/MultiBraille/speech.h | 8 +- Drivers/Speech/Skeleton/Makefile.in | 8 +- Drivers/Speech/Skeleton/speech.c | 8 +- Drivers/Speech/SpeechDispatcher/Makefile.in | 8 +- Drivers/Speech/SpeechDispatcher/speech.c | 8 +- Drivers/Speech/Swift/Makefile.in | 8 +- Drivers/Speech/Swift/speech.c | 8 +- Drivers/Speech/Theta/Makefile.in | 8 +- Drivers/Speech/Theta/speech.c | 8 +- Drivers/Speech/ViaVoice/Makefile.in | 8 +- Drivers/Speech/ViaVoice/speech.c | 8 +- Drivers/Speech/ViaVoice/speech.h | 8 +- Drivers/Speech/eSpeak/Makefile.in | 8 +- Drivers/Speech/eSpeak/speech.c | 8 +- Headers/addresses.h | 8 +- Headers/alert.h | 10 +- Headers/api_types.h | 8 +- Headers/ascii.h | 8 +- Headers/async.h | 8 +- Headers/async_alarm.h | 18 +- Headers/async_event.h | 8 +- Headers/async_io.h | 8 +- Headers/async_signal.h | 8 +- Headers/async_task.h | 8 +- Headers/async_wait.h | 8 +- Headers/atb.h | 8 +- Headers/auth.h | 8 +- Headers/beep.h | 8 +- Headers/bell.h | 8 +- Headers/bitfield.h | 8 +- Headers/bitmask.h | 8 +- Headers/brl_base.h | 8 +- Headers/brl_cmds.h | 8 +- Headers/brl_custom.h | 8 +- Headers/brl_dots.h | 8 +- Headers/brl_driver.h | 8 +- Headers/brl_types.h | 8 +- Headers/brl_utils.h | 8 +- Headers/charset.h | 8 +- Headers/cmd.h | 8 +- Headers/cmd_enqueue.h | 8 +- Headers/cmd_types.h | 8 +- Headers/ctb.h | 8 +- Headers/ctb_types.h | 8 +- Headers/dataarea.h | 8 +- Headers/datafile.h | 8 +- Headers/device.h | 11 +- Headers/driver.h | 10 +- Headers/drivers.h | 8 +- Headers/dynld.h | 8 +- Headers/embed.h | 8 +- Headers/file.h | 8 +- Headers/fm.h | 8 +- Headers/fm_adlib.h | 8 +- Headers/get_curses.h | 8 +- Headers/get_pthreads.h | 8 +- Headers/get_select.h | 8 +- Headers/get_sockets.h | 8 +- Headers/gio_types.h | 8 +- Headers/hostcmd.h | 8 +- Headers/io_bluetooth.h | 10 +- Headers/io_generic.h | 8 +- Headers/io_misc.h | 8 +- Headers/io_serial.h | 10 +- Headers/io_usb.h | 10 +- Headers/kbd_keycodes.h | 8 +- Headers/ktb.h | 8 +- Headers/ktb_types.h | 8 +- Headers/leds.h | 8 +- Headers/lock.h | 8 +- Headers/log.h | 8 +- Headers/log_history.h | 8 +- Headers/menu.h | 8 +- Headers/message.h | 8 +- Headers/midi.h | 8 +- Headers/mntfs.h | 8 +- Headers/mntpt.h | 8 +- Headers/note_types.h | 8 +- Headers/notes.h | 8 +- Headers/options.h | 8 +- Headers/params.h | 8 +- Headers/parse.h | 12 +- Headers/pcm.h | 8 +- Headers/pgmpath.h | 8 +- Headers/pid.h | 8 +- Headers/ports.h | 8 +- Headers/prefs.h | 11 +- Headers/program.h | 8 +- Headers/prologue.h | 10 +- Headers/queue.h | 8 +- Headers/report.h | 8 +- Headers/revision.h | 8 +- Headers/scr_base.h | 8 +- Headers/scr_driver.h | 8 +- Headers/scr_gpm.h | 8 +- Headers/scr_main.h | 8 +- Headers/scr_real.h | 8 +- Headers/scr_types.h | 8 +- Headers/scr_utils.h | 8 +- Headers/serial_types.h | 8 +- Headers/service.h | 8 +- Headers/spk.h | 8 +- Headers/spk_base.h | 8 +- Headers/spk_driver.h | 8 +- Headers/spk_types.h | 8 +- Headers/status_types.h | 8 +- Headers/stdiox.h | 8 +- Headers/strfmt.h | 8 +- Headers/strfmth.h | 8 +- Headers/system.h | 8 +- Headers/system_darwin.h | 8 +- Headers/system_java.h | 8 +- Headers/system_linux.h | 8 +- Headers/system_msdos.h | 8 +- Headers/system_windows.h | 8 +- Headers/thread.h | 8 +- Headers/timing.h | 8 +- Headers/ttb.h | 8 +- Headers/tune.h | 8 +- Headers/tune_build.h | 8 +- Headers/tune_types.h | 8 +- Headers/tune_utils.h | 8 +- Headers/unicode.h | 8 +- Headers/usb_types.h | 8 +- Headers/variables.h | 8 +- Headers/win_errno.h | 2 +- Headers/win_pthread.h | 8 +- Makefile.in | 12 +- Messages/Makefile.in | 8 +- Messages/brltty.pot | 424 ++--- Messages/de.po | 571 +++--- Messages/fr.po | 8 +- Messages/zh.po | 8 +- Programs/Makefile.in | 62 +- Programs/activity.c | 10 +- Programs/activity.h | 8 +- Programs/addresses.c | 8 +- Programs/alert.c | 12 +- Programs/api.h | 2 +- Programs/api_control.c | 8 +- Programs/api_control.h | 8 +- Programs/api_server.h | 8 +- Programs/apitest.c | 44 +- Programs/async_alarm.c | 26 +- Programs/async_data.c | 8 +- Programs/async_event.c | 8 +- Programs/async_handle.c | 8 +- Programs/async_internal.h | 8 +- Programs/async_io.c | 8 +- Programs/async_signal.c | 8 +- Programs/async_task.c | 8 +- Programs/async_wait.c | 8 +- Programs/atb_compile.c | 8 +- Programs/atb_internal.h | 8 +- Programs/atb_translate.c | 8 +- Programs/auth.c | 8 +- Programs/beep.c | 8 +- Programs/beep_linux.c | 8 +- Programs/beep_msdos.c | 8 +- Programs/beep_none.c | 8 +- Programs/beep_solaris.c | 8 +- Programs/beep_spkr.c | 8 +- Programs/beep_windows.c | 8 +- Programs/beep_wskbd.c | 8 +- Programs/bell.c | 8 +- Programs/bell_linux.c | 8 +- Programs/bell_none.c | 8 +- Programs/blink.c | 10 +- Programs/blink.h | 8 +- Programs/bluetooth.c | 12 +- Programs/bluetooth_android.c | 8 +- Programs/bluetooth_darwin.c | 8 +- Programs/bluetooth_internal.h | 8 +- Programs/bluetooth_linux.c | 8 +- Programs/bluetooth_names.c | 23 +- Programs/bluetooth_none.c | 8 +- Programs/bluetooth_windows.c | 8 +- Programs/brl.c | 8 +- Programs/brl.h | 8 +- Programs/brl_base.c | 12 +- Programs/brl_cmds.awk | 8 +- Programs/brl_driver.c | 9 +- Programs/brl_input.c | 8 +- Programs/brl_input.h | 8 +- Programs/brl_utils.c | 8 +- Programs/brlapi.awk | 9 +- Programs/brlapi.h.in | 53 +- Programs/brlapi_brldefs.awk | 8 +- Programs/brlapi_client.c | 140 +- Programs/brlapi_common.h | 7 +- Programs/brlapi_constants.awk | 8 +- Programs/brlapi_keycodes.h | 4 +- Programs/brlapi_keyranges.c | 10 +- Programs/brlapi_keyranges.h | 12 +- Programs/brlapi_keytab.awk | 8 +- Programs/brlapi_protocol.h | 4 +- Programs/brlapi_server.c | 71 +- Programs/brldefs.h | 2 +- Programs/brltest.c | 8 +- Programs/brltty-atb.c | 8 +- Programs/brltty-ctb.c | 30 +- Programs/brltty-genkey | 8 +- Programs/brltty-ktb | Bin 1615572 -> 1617196 bytes Programs/brltty-ktb.c | 8 +- Programs/brltty-trtxt.c | 8 +- Programs/brltty-ttb.c | 8 +- Programs/brltty-tune.c | 8 +- Programs/brltty.c | 8 +- Programs/brltty.java | 8 +- Programs/brltty_jni.c | 8 +- Programs/charset.c | 8 +- Programs/charset_grub.c | 8 +- Programs/charset_iconv.c | 8 +- Programs/charset_internal.h | 8 +- Programs/charset_msdos.c | 8 +- Programs/charset_none.c | 8 +- Programs/charset_windows.c | 8 +- Programs/cmd.c | 8 +- Programs/cmd_brlapi.c | 8 +- Programs/cmd_brlapi.h | 8 +- Programs/cmd_clipboard.c | 8 +- Programs/cmd_clipboard.h | 8 +- Programs/cmd_custom.c | 8 +- Programs/cmd_custom.h | 8 +- Programs/cmd_input.c | 14 +- Programs/cmd_input.h | 8 +- Programs/cmd_keycodes.c | 8 +- Programs/cmd_keycodes.h | 8 +- Programs/cmd_learn.c | 8 +- Programs/cmd_learn.h | 8 +- Programs/cmd_miscellaneous.c | 8 +- Programs/cmd_miscellaneous.h | 8 +- Programs/cmd_navigation.c | 51 +- Programs/cmd_navigation.h | 8 +- Programs/cmd_preferences.c | 8 +- Programs/cmd_preferences.h | 8 +- Programs/cmd_queue.c | 10 +- Programs/cmd_queue.h | 8 +- Programs/cmd_speech.c | 24 +- Programs/cmd_speech.h | 8 +- Programs/cmd_toggle.c | 11 +- Programs/cmd_toggle.h | 8 +- Programs/cmd_touch.c | 8 +- Programs/cmd_touch.h | 8 +- Programs/cmd_utils.c | 8 +- Programs/cmd_utils.h | 8 +- Programs/cmds.awk | 8 +- Programs/config.c | 23 +- Programs/core.c | 158 +- Programs/core.h | 24 +- Programs/ctb_compile.c | 323 +++- Programs/ctb_external.c | 361 ++++ Programs/ctb_internal.h | 32 +- Programs/ctb_louis.c | 128 ++ Programs/ctb_native.c | 1107 ++++++++++++ Programs/ctb_translate.c | 1605 +---------------- Programs/ctb_translate.h | 148 ++ Programs/dataarea.c | 8 +- Programs/datafile.c | 8 +- Programs/defaults.h | 16 +- Programs/device.c | 33 +- Programs/driver.c | 12 +- Programs/drivers.c | 8 +- Programs/dynld_dlfcn.c | 8 +- Programs/dynld_dyld.c | 8 +- Programs/dynld_grub.c | 8 +- Programs/dynld_none.c | 8 +- Programs/dynld_shl.c | 8 +- Programs/dynld_windows.c | 8 +- Programs/file.c | 12 +- Programs/fm_adlib.c | 8 +- Programs/fm_none.c | 8 +- Programs/gio.c | 10 +- Programs/gio_bluetooth.c | 10 +- Programs/gio_internal.h | 8 +- Programs/gio_null.c | 12 +- Programs/gio_serial.c | 10 +- Programs/gio_usb.c | 10 +- Programs/hidkeys.c | 8 +- Programs/hidkeys.h | 8 +- Programs/hostcmd.c | 8 +- Programs/hostcmd_internal.h | 8 +- Programs/hostcmd_none.c | 8 +- Programs/hostcmd_none.h | 8 +- Programs/hostcmd_unix.c | 8 +- Programs/hostcmd_unix.h | 8 +- Programs/hostcmd_windows.c | 8 +- Programs/hostcmd_windows.h | 8 +- Programs/io_misc.c | 8 +- Programs/kbd.c | 8 +- Programs/kbd.h | 8 +- Programs/kbd_android.c | 8 +- Programs/kbd_android.h | 8 +- Programs/kbd_internal.h | 8 +- Programs/kbd_keycodes.c | 8 +- Programs/kbd_linux.c | 14 +- Programs/kbd_none.c | 8 +- Programs/ktb_audit.c | 8 +- Programs/ktb_cmds.c | 8 +- Programs/ktb_compile.c | 87 +- Programs/ktb_inspect.h | 8 +- Programs/ktb_internal.h | 8 +- Programs/ktb_keyboard.c | 8 +- Programs/ktb_keyboard.h | 8 +- Programs/ktb_list.c | 8 +- Programs/ktb_list.h | 8 +- Programs/ktb_translate.c | 16 +- Programs/learn.c | 8 +- Programs/learn.h | 8 +- Programs/leds.c | 8 +- Programs/leds_linux.c | 8 +- Programs/leds_none.c | 8 +- Programs/lock.c | 8 +- Programs/log.c | 8 +- Programs/log_history.c | 8 +- Programs/menu.c | 8 +- Programs/menu_prefs.c | 18 +- Programs/menu_prefs.h | 8 +- Programs/message.c | 11 +- Programs/midi.c | 8 +- Programs/midi_alsa.c | 174 +- Programs/midi_darwin.c | 8 +- Programs/midi_none.c | 8 +- Programs/midi_oss.c | 8 +- Programs/midi_windows.c | 8 +- Programs/mkdrvtab | 8 +- Programs/mntfs_linux.c | 8 +- Programs/mntfs_none.c | 8 +- Programs/mntpt.c | 10 +- Programs/mntpt_internal.h | 8 +- Programs/mntpt_mntent.c | 8 +- Programs/mntpt_mntent.h | 8 +- Programs/mntpt_mnttab.c | 8 +- Programs/mntpt_mnttab.h | 8 +- Programs/mntpt_none.c | 8 +- Programs/mntpt_none.h | 8 +- Programs/notes.c | 8 +- Programs/notes_beep.c | 8 +- Programs/notes_fm.c | 8 +- Programs/notes_midi.c | 8 +- Programs/notes_pcm.c | 8 +- Programs/options.c | 8 +- Programs/parameters.h | 8 +- Programs/params_linux.c | 8 +- Programs/params_none.c | 8 +- Programs/parse.c | 30 +- Programs/pcm.c | 8 +- Programs/pcm_alsa.c | 144 +- Programs/pcm_android.c | 8 +- Programs/pcm_audio.c | 8 +- Programs/pcm_hpux.c | 8 +- Programs/pcm_none.c | 8 +- Programs/pcm_oss.c | 8 +- Programs/pcm_qsa.c | 8 +- Programs/pcm_windows.c | 8 +- Programs/pgmpath_linux.c | 8 +- Programs/pgmpath_none.c | 8 +- Programs/pgmpath_solaris.c | 8 +- Programs/pgmpath_windows.c | 8 +- Programs/pid.c | 8 +- Programs/pipe.c | 8 +- Programs/pipe.h | 8 +- Programs/ports_glibc.c | 8 +- Programs/ports_grub.c | 8 +- Programs/ports_kfreebsd.c | 8 +- Programs/ports_msdos.c | 8 +- Programs/ports_none.c | 8 +- Programs/ports_windows.c | 8 +- Programs/ports_x86.h | 8 +- Programs/prefs.c | 8 +- Programs/prefs_internal.h | 8 +- Programs/prefs_table.c | 20 +- Programs/profile.c | 8 +- Programs/profile.h | 8 +- Programs/profile_types.h | 8 +- Programs/program.c | 8 +- Programs/queue.c | 8 +- Programs/reldeps.mk | 64 +- Programs/report.c | 8 +- Programs/revision.c | 8 +- Programs/revision_identifier.h | 2 +- Programs/routing.c | 350 ++-- Programs/routing.h | 8 +- Programs/scr.c | 8 +- Programs/scr.h | 18 +- Programs/scr_base.c | 8 +- Programs/scr_driver.c | 8 +- Programs/scr_frozen.c | 14 +- Programs/scr_frozen.h | 8 +- Programs/scr_gpm.c | 10 +- Programs/scr_help.c | 8 +- Programs/scr_help.h | 8 +- Programs/scr_internal.h | 8 +- Programs/scr_main.c | 8 +- Programs/scr_menu.c | 8 +- Programs/scr_menu.h | 8 +- Programs/scr_real.c | 8 +- Programs/scr_special.c | 8 +- Programs/scr_special.h | 8 +- Programs/scr_utils.c | 8 +- Programs/scrtest.c | 8 +- Programs/serial.c | 14 +- Programs/serial_grub.c | 8 +- Programs/serial_grub.h | 8 +- Programs/serial_internal.h | 8 +- Programs/serial_msdos.c | 8 +- Programs/serial_msdos.h | 8 +- Programs/serial_none.c | 8 +- Programs/serial_none.h | 8 +- Programs/serial_termios.c | 8 +- Programs/serial_termios.h | 8 +- Programs/serial_uart.h | 8 +- Programs/serial_windows.c | 8 +- Programs/serial_windows.h | 8 +- Programs/service_libsystemd.c | 8 +- Programs/service_none.c | 8 +- Programs/service_windows.c | 8 +- Programs/ses.c | 8 +- Programs/ses.h | 8 +- Programs/spk.c | 8 +- Programs/spk_base.c | 8 +- Programs/spk_driver.c | 8 +- Programs/spk_input.c | 8 +- Programs/spk_input.h | 8 +- Programs/spk_thread.c | 8 +- Programs/spk_thread.h | 8 +- Programs/spktest.c | 8 +- Programs/status.c | 8 +- Programs/status.h | 8 +- Programs/sys_darwin.c | 8 +- Programs/sys_freebsd.c | 8 +- Programs/sys_kfreebsd.c | 8 +- Programs/sys_netbsd.c | 8 +- Programs/sys_openbsd.c | 8 +- Programs/sys_solaris.c | 8 +- Programs/system_darwin.c | 8 +- Programs/system_java.c | 8 +- Programs/system_linux.c | 8 +- Programs/system_msdos.c | 8 +- Programs/system_none.c | 8 +- Programs/system_windows.c | 8 +- Programs/tbl2hex.c | 25 +- Programs/thread.c | 8 +- Programs/timing.c | 8 +- Programs/ttb_compile.c | 8 +- Programs/ttb_compile.h | 8 +- Programs/ttb_gnome.c | 8 +- Programs/ttb_internal.h | 8 +- Programs/ttb_louis.c | 8 +- Programs/ttb_native.c | 8 +- Programs/ttb_translate.c | 8 +- Programs/tune.c | 10 +- Programs/tune_build.c | 8 +- Programs/tune_utils.c | 8 +- Programs/unicode.c | 8 +- Programs/update.c | 169 +- Programs/update.h | 8 +- Programs/usb.c | 16 +- Programs/usb_adapters.c | 8 +- Programs/usb_adapters.h | 8 +- Programs/usb_android.c | 8 +- Programs/usb_belkin.c | 8 +- Programs/usb_belkin.h | 8 +- Programs/usb_bsd.h | 8 +- Programs/usb_cdc_acm.c | 8 +- Programs/usb_cdc_acm.h | 8 +- Programs/usb_cp2101.c | 8 +- Programs/usb_cp2101.h | 8 +- Programs/usb_cp2110.c | 8 +- Programs/usb_cp2110.h | 8 +- Programs/usb_darwin.c | 8 +- Programs/usb_freebsd.c | 8 +- Programs/usb_ftdi.c | 8 +- Programs/usb_ftdi.h | 8 +- Programs/usb_grub.c | 8 +- Programs/usb_hid.c | 8 +- Programs/usb_internal.h | 8 +- Programs/usb_kfreebsd.c | 8 +- Programs/usb_libusb-1.0.c | 8 +- Programs/usb_libusb.c | 8 +- Programs/usb_linux.c | 8 +- Programs/usb_netbsd.c | 8 +- Programs/usb_none.c | 8 +- Programs/usb_openbsd.c | 8 +- Programs/usb_serial.c | 8 +- Programs/usb_serial.h | 8 +- Programs/usb_solaris.c | 8 +- Programs/variables.c | 8 +- Programs/xbrlapi.c | 12 +- README | 43 +- Tables/Attributes/invleft_right.atb | 2 +- Tables/Attributes/left_right.atb | 2 +- Tables/Attributes/upper_lower.atb | 2 +- Tables/Contraction/af.ctb | 2 +- Tables/Contraction/am.ctb | 2 +- Tables/Contraction/countries.cti | 2 +- Tables/Contraction/de-basis.ctb | 2 +- Tables/Contraction/de-kurzschrift.ctb | 2 +- Tables/Contraction/de-vollschrift.ctb | 2 +- Tables/Contraction/en-ueb-g2.ctb | 2 +- Tables/Contraction/en-us-g2.ctb | 2 +- Tables/Contraction/es.ctb | 2 +- Tables/Contraction/fr-abrege.ctb | 6 +- Tables/Contraction/fr-integral.ctb | 2 +- Tables/Contraction/ha.ctb | 2 +- Tables/Contraction/id.ctb | 2 +- Tables/Contraction/ipa.ctb | 2 +- Tables/Contraction/ja.ctb | 2 +- Tables/Contraction/ko-g1.ctb | 2 +- Tables/Contraction/ko-g2.ctb | 2 +- Tables/Contraction/ko.ctb | 2 +- Tables/Contraction/latex-access.ctb | 2 +- Tables/Contraction/letters-latin.cti | 2 +- Tables/Contraction/lt.ctb | 227 +++ Tables/Contraction/mg.ctb | 2 +- Tables/Contraction/mun.ctb | 2 +- Tables/Contraction/nabcc.cti | 2 +- Tables/Contraction/nl.ctb | 2 +- Tables/Contraction/ny.ctb | 2 +- Tables/Contraction/pt.ctb | 2 +- Tables/Contraction/si.ctb | 2 +- Tables/Contraction/spaces.cti | 34 + Tables/Contraction/sw.ctb | 2 +- Tables/Contraction/th.ctb | 2 +- Tables/Contraction/zh-tw-ucb.ctb | 2 +- Tables/Contraction/zh-tw.ctb | 2 +- Tables/Contraction/zu.ctb | 2 +- Tables/Input/al/abt_basic.kti | 2 +- Tables/Input/al/abt_extra.kti | 2 +- Tables/Input/al/abt_large.ktb | 2 +- Tables/Input/al/abt_small.ktb | 2 +- Tables/Input/al/bc-etouch.kti | 2 +- Tables/Input/al/bc-smartpad.kti | 2 +- Tables/Input/al/bc-thumb.kti | 2 +- Tables/Input/al/bc.kti | 2 +- Tables/Input/al/bc640.ktb | 2 +- Tables/Input/al/bc680.ktb | 2 +- Tables/Input/al/el.ktb | 2 +- Tables/Input/al/sat_basic.kti | 2 +- Tables/Input/al/sat_extra.kti | 2 +- Tables/Input/al/sat_large.ktb | 2 +- Tables/Input/al/sat_small.ktb | 2 +- Tables/Input/al/voyager.ktb | 2 +- Tables/Input/at/all.ktb | 2 +- Tables/Input/bg/all.ktb | 2 +- Tables/Input/bm/b9b10.kti | 4 +- Tables/Input/bm/b9b11b10.kti | 2 +- Tables/Input/bm/command.kti | 2 +- Tables/Input/bm/connect.ktb | 2 +- Tables/Input/bm/conny.ktb | 2 +- Tables/Input/bm/d6.kti | 2 +- Tables/Input/bm/default.ktb | 2 +- Tables/Input/bm/display6.kti | 2 +- Tables/Input/bm/display7.kti | 2 +- Tables/Input/bm/dm80p.ktb | 2 +- Tables/Input/bm/front10.kti | 2 +- Tables/Input/bm/front6.kti | 2 +- Tables/Input/bm/horizontal.kti | 2 +- Tables/Input/bm/inka.ktb | 2 +- Tables/Input/bm/keyboard.kti | 2 +- Tables/Input/bm/orbit.ktb | 2 +- Tables/Input/bm/pro.ktb | 2 +- Tables/Input/bm/pronto.ktb | 2 +- Tables/Input/bm/pv.ktb | 2 +- Tables/Input/bm/rb.ktb | 2 +- Tables/Input/{hw/mb1.ktb => bm/routing.kti} | 6 +- Tables/Input/bm/routing6.kti | 4 +- Tables/Input/bm/routing7.kti | 4 +- Tables/Input/bm/status.kti | 2 +- Tables/Input/bm/sv.ktb | 2 +- Tables/Input/bm/ultra.ktb | 2 +- Tables/Input/bm/v40.ktb | 2 +- Tables/Input/bm/v80.ktb | 2 +- Tables/Input/bm/vertical.kti | 2 +- Tables/Input/bm/vk.ktb | 2 +- Tables/Input/bm/wheels.kti | 2 +- Tables/Input/bn/all.ktb | 2 +- Tables/Input/bn/input.kti | 2 +- Tables/Input/bp/all.kti | 2 +- Tables/Input/cb/all.ktb | 2 +- Tables/Input/ce/all.ktb | 2 +- Tables/Input/ce/novem.ktb | 2 +- Tables/Input/chords.kti | 2 +- Tables/Input/eu/braille.kti | 2 +- Tables/Input/eu/clio.ktb | 2 +- Tables/Input/eu/common.kti | 2 +- Tables/Input/eu/esys_large.ktb | 2 +- Tables/Input/eu/esys_medium.ktb | 2 +- Tables/Input/eu/esys_small.ktb | 2 +- Tables/Input/eu/esytime.ktb | 43 +- Tables/Input/eu/iris.ktb | 2 +- Tables/Input/eu/joysticks.kti | 2 +- Tables/Input/eu/routing.kti | 2 +- Tables/Input/eu/sw12.kti | 2 +- Tables/Input/eu/sw34.kti | 2 +- Tables/Input/eu/sw56.kti | 2 +- Tables/Input/fs/bumpers.kti | 2 +- Tables/Input/fs/common.kti | 2 +- Tables/Input/fs/focus_basic.ktb | 2 +- Tables/Input/fs/focus_basic.kti | 2 +- Tables/Input/fs/focus_large.ktb | 2 +- Tables/Input/fs/focus_small.ktb | 2 +- Tables/Input/fs/pacmate.ktb | 2 +- Tables/Input/fs/rockers.kti | 2 +- Tables/Input/hd/mbl.ktb | 2 +- Tables/Input/hd/pfl.ktb | 2 +- Tables/Input/hm/beetle.ktb | 2 +- Tables/Input/hm/braille.kti | 2 +- Tables/Input/hm/common.kti | 2 +- Tables/Input/hm/contexts.kti | 2 +- Tables/Input/hm/edge.ktb | 2 +- Tables/Input/hm/f14.kti | 2 +- Tables/Input/hm/f18.kti | 2 +- Tables/Input/hm/fnkey.kti | 2 +- Tables/Input/hm/left.kti | 2 +- Tables/Input/hm/letters.kti | 2 +- Tables/Input/hm/pan.ktb | 2 +- Tables/Input/hm/pan.kti | 2 +- Tables/Input/hm/qwerty.ktb | 2 +- Tables/Input/hm/qwerty.kti | 2 +- Tables/Input/hm/right.kti | 2 +- Tables/Input/hm/scroll.ktb | 2 +- Tables/Input/hm/scroll.kti | 2 +- Tables/Input/hm/sync.ktb | 2 +- Tables/Input/ht/ab40.ktb | 2 +- Tables/Input/ht/alo.ktb | 2 +- Tables/Input/ht/as40.ktb | 2 +- Tables/Input/ht/bb.ktb | 2 +- Tables/Input/ht/bkwm.ktb | 2 +- Tables/Input/ht/brln.ktb | 2 +- Tables/Input/ht/bs.kti | 2 +- Tables/Input/ht/bs40.ktb | 2 +- Tables/Input/ht/bs80.ktb | 2 +- Tables/Input/ht/cb40.ktb | 2 +- Tables/Input/ht/dots.kti | 2 +- Tables/Input/ht/easy.ktb | 2 +- Tables/Input/ht/input.kti | 2 +- Tables/Input/ht/joystick.kti | 2 +- Tables/Input/ht/keypad.kti | 2 +- Tables/Input/ht/mc88.ktb | 2 +- Tables/Input/ht/mdlr.ktb | 2 +- Tables/Input/ht/me.kti | 2 +- Tables/Input/ht/me64.ktb | 2 +- Tables/Input/ht/me88.ktb | 2 +- Tables/Input/ht/rockers.kti | 2 +- Tables/Input/ht/wave.ktb | 2 +- Tables/Input/hw/{mb2.ktb => B80.ktb} | 8 +- Tables/Input/hw/BI14.ktb | 23 + Tables/Input/hw/BI32.ktb | 23 + Tables/Input/hw/BI40.ktb | 23 + Tables/Input/hw/{kbd.kti => braille.kti} | 15 +- Tables/Input/hw/command.kti | 20 + Tables/Input/hw/joystick.kti | 23 + Tables/Input/hw/{nav.kti => thumb.kti} | 58 +- Tables/Input/hw/touch.ktb | 22 + Tables/Input/ic/all.ktb | 67 + Tables/Input/ir/all.kti | 2 +- Tables/Input/ir/brl.ktb | 2 +- Tables/Input/ir/pc.ktb | 2 +- Tables/Input/md/common.kti | 2 +- Tables/Input/md/default.ktb | 2 +- Tables/Input/md/fk.ktb | 2 +- Tables/Input/md/fk_s.ktb | 2 +- Tables/Input/md/fkeys.kti | 2 +- Tables/Input/md/kbd.ktb | 2 +- Tables/Input/md/keyboard.kti | 2 +- Tables/Input/md/status.kti | 2 +- Tables/Input/menu.kti | 2 +- Tables/Input/mm/common.kti | 2 +- Tables/Input/mm/pocket.ktb | 2 +- Tables/Input/mm/smart.ktb | 2 +- Tables/Input/mt/bd1_3.ktb | 2 +- Tables/Input/mt/bd1_3.kti | 2 +- Tables/Input/mt/bd1_3s.ktb | 2 +- Tables/Input/mt/bd1_6.ktb | 2 +- Tables/Input/mt/bd1_6.kti | 2 +- Tables/Input/mt/bd1_6s.ktb | 2 +- Tables/Input/mt/bd2.ktb | 2 +- Tables/Input/mt/status.kti | 2 +- Tables/Input/np/all.ktb | 2 +- Tables/Input/pg/all.ktb | 2 +- Tables/Input/pm/2d_l.ktb | 2 +- Tables/Input/pm/2d_s.ktb | 2 +- Tables/Input/pm/bar.kti | 2 +- Tables/Input/pm/c.ktb | 2 +- Tables/Input/pm/c_486.ktb | 2 +- Tables/Input/pm/el2d_80s.ktb | 2 +- Tables/Input/pm/el40c.ktb | 2 +- Tables/Input/pm/el40s.ktb | 2 +- Tables/Input/pm/el60c.ktb | 2 +- Tables/Input/pm/el66s.ktb | 2 +- Tables/Input/pm/el70s.ktb | 2 +- Tables/Input/pm/el80_ii.ktb | 2 +- Tables/Input/pm/el80c.ktb | 2 +- Tables/Input/pm/el80s.ktb | 2 +- Tables/Input/pm/el_2d_40.ktb | 2 +- Tables/Input/pm/el_2d_66.ktb | 2 +- Tables/Input/pm/el_2d_80.ktb | 2 +- Tables/Input/pm/el_40_p.ktb | 2 +- Tables/Input/pm/el_80.ktb | 2 +- Tables/Input/pm/elb_tr_20.ktb | 2 +- Tables/Input/pm/elb_tr_32.ktb | 2 +- Tables/Input/pm/elba_20.ktb | 2 +- Tables/Input/pm/elba_32.ktb | 2 +- Tables/Input/pm/front13.kti | 2 +- Tables/Input/pm/front9.kti | 2 +- Tables/Input/pm/ib_80.ktb | 2 +- Tables/Input/pm/keyboard.kti | 2 +- Tables/Input/pm/keys.kti | 2 +- Tables/Input/pm/live.ktb | 2 +- Tables/Input/pm/routing.kti | 2 +- Tables/Input/pm/status0.kti | 2 +- Tables/Input/pm/status13.kti | 2 +- Tables/Input/pm/status2.kti | 2 +- Tables/Input/pm/status20.kti | 2 +- Tables/Input/pm/status22.kti | 2 +- Tables/Input/pm/status4.kti | 2 +- Tables/Input/pm/switches.kti | 2 +- Tables/Input/pm/trio.ktb | 2 +- Tables/Input/sk/bdp.ktb | 2 +- Tables/Input/sk/ntk.ktb | 2 +- Tables/Input/toggle.kti | 2 +- Tables/Input/ts/nav.kti | 2 +- Tables/Input/ts/nav20.ktb | 2 +- Tables/Input/ts/nav40.ktb | 2 +- Tables/Input/ts/nav80.ktb | 2 +- Tables/Input/ts/nav_large.kti | 2 +- Tables/Input/ts/nav_small.kti | 2 +- Tables/Input/ts/pb.kti | 2 +- Tables/Input/ts/pb40.ktb | 2 +- Tables/Input/ts/pb65.ktb | 2 +- Tables/Input/ts/pb80.ktb | 2 +- Tables/Input/ts/pb_large.kti | 2 +- Tables/Input/ts/pb_small.kti | 2 +- Tables/Input/ts/routing.kti | 2 +- Tables/Input/vo/all.ktb | 2 +- Tables/Input/vo/all.kti | 2 +- Tables/Input/vo/bp.ktb | 2 +- Tables/Keyboard/braille.ktb | 2 +- Tables/Keyboard/braille.kti | 2 +- Tables/Keyboard/desktop.ktb | 2 +- Tables/Keyboard/desktop.kti | 2 +- Tables/Keyboard/keypad.ktb | 2 +- Tables/Keyboard/kp_say.kti | 2 +- Tables/Keyboard/kp_speak.kti | 2 +- Tables/Keyboard/laptop.ktb | 2 +- Tables/Keyboard/sun_type6.ktb | 2 +- Tables/Text/ar.ttb | 2 +- Tables/Text/as.ttb | 2 +- Tables/Text/ascii-basic.tti | 2 +- Tables/Text/awa.ttb | 2 +- Tables/Text/bengali.tti | 2 +- Tables/Text/bg.ttb | 2 +- Tables/Text/bh.ttb | 2 +- Tables/Text/blocks.tti | 2 +- Tables/Text/bn.ttb | 2 +- Tables/Text/bo.ttb | 2 +- Tables/Text/boxes.tti | 2 +- Tables/Text/bra.ttb | 2 +- Tables/Text/brf.ttb | 2 +- Tables/Text/common.tti | 2 +- Tables/Text/cs.ttb | 2 +- Tables/Text/ctl-latin.tti | 2 +- Tables/Text/cy.ttb | 2 +- Tables/Text/da-1252.ttb | 2 +- Tables/Text/da-lt.ttb | 2 +- Tables/Text/da.ttb | 2 +- Tables/Text/de-chess.tti | 2 +- Tables/Text/de.ttb | 2 +- Tables/Text/devanagari.tti | 2 +- Tables/Text/dra.ttb | 2 +- Tables/Text/el.ttb | 2 +- Tables/Text/en-chess.tti | 2 +- Tables/Text/en-na-ascii.tti | 2 +- Tables/Text/en-nabcc.ttb | 2 +- Tables/Text/en.ttb | 2 +- Tables/Text/en_CA.ttb | 2 +- Tables/Text/en_GB.ttb | 2 +- Tables/Text/en_US.ttb | 2 +- Tables/Text/eo.ttb | 2 +- Tables/Text/es.ttb | 2 +- Tables/Text/et.ttb | 2 +- Tables/Text/fi.ttb | 35 +- Tables/Text/fr-2007.ttb | 2 +- Tables/Text/fr-cbifs.ttb | 2 +- Tables/Text/fr-vs.ttb | 2 +- Tables/Text/fr.ttb | 2 +- Tables/Text/fr_CA.ttb | 2 +- Tables/Text/fr_FR.ttb | 2 +- Tables/Text/ga.ttb | 2 +- Tables/Text/gd.ttb | 2 +- Tables/Text/gon.ttb | 2 +- Tables/Text/greek.tti | 2 +- Tables/Text/gu.ttb | 2 +- Tables/Text/gujarati.tti | 2 +- Tables/Text/gurmukhi.tti | 2 +- Tables/Text/he.ttb | 2 +- Tables/Text/hi.ttb | 2 +- Tables/Text/hr.ttb | 2 +- Tables/Text/hu.ttb | 2 +- Tables/Text/hy.ttb | 2 +- Tables/Text/is.ttb | 2 +- Tables/Text/it.ttb | 2 +- Tables/Text/kannada.tti | 2 +- Tables/Text/kha.ttb | 2 +- Tables/Text/kn.ttb | 2 +- Tables/Text/kok.ttb | 2 +- Tables/Text/kru.ttb | 2 +- Tables/Text/lt.ttb | 169 +- Tables/Text/ltr-alias.tti | 2 +- Tables/Text/ltr-cyrillic.tti | 10 +- Tables/Text/ltr-dot8.tti | 2 +- Tables/Text/ltr-latin.tti | 2 +- Tables/Text/ltr-tibetan.tti | 2 +- Tables/Text/lv.ttb | 2 +- Tables/Text/malayalam.tti | 2 +- Tables/Text/mg.ttb | 2 +- Tables/Text/mi.ttb | 2 +- Tables/Text/ml.ttb | 2 +- Tables/Text/mni.ttb | 2 +- Tables/Text/mr.ttb | 2 +- Tables/Text/mt.ttb | 2 +- Tables/Text/mun.ttb | 2 +- Tables/Text/mwr.ttb | 2 +- Tables/Text/ne.ttb | 2 +- Tables/Text/new.ttb | 2 +- Tables/Text/nl.ttb | 2 +- Tables/Text/nl_BE.ttb | 2 +- Tables/Text/nl_NL.ttb | 2 +- Tables/Text/no-generic.ttb | 2 +- Tables/Text/no-oup.ttb | 2 +- Tables/Text/no.ttb | 2 +- Tables/Text/num-alias.tti | 2 +- Tables/Text/num-dot6.tti | 2 +- Tables/Text/num-dot8.tti | 2 +- Tables/Text/num-french.tti | 2 +- Tables/Text/num-nemd8.tti | 2 +- Tables/Text/num-nemeth.tti | 2 +- Tables/Text/nwc.ttb | 2 +- Tables/Text/or.ttb | 2 +- Tables/Text/oriya.tti | 2 +- Tables/Text/pa.ttb | 2 +- Tables/Text/pi.ttb | 2 +- Tables/Text/pl.ttb | 2 +- Tables/Text/pt.ttb | 2 +- Tables/Text/punc-alternate.tti | 2 +- Tables/Text/punc-basic.tti | 2 +- Tables/Text/punc-tibetan.tti | 2 +- Tables/Text/ro.ttb | 2 +- Tables/Text/ru.ttb | 2 +- Tables/Text/sa.ttb | 2 +- Tables/Text/sat.ttb | 2 +- Tables/Text/sd.ttb | 2 +- Tables/Text/sk.ttb | 2 +- Tables/Text/sl.ttb | 2 +- Tables/Text/spaces.tti | 2 +- Tables/Text/sv-1989.ttb | 2 +- Tables/Text/sv-1996.ttb | 2 +- Tables/Text/sv.ttb | 2 +- Tables/Text/sw.ttb | 2 +- Tables/Text/ta.ttb | 2 +- Tables/Text/tamil.tti | 2 +- Tables/Text/te.ttb | 2 +- Tables/Text/telugu.tti | 2 +- Tables/Text/tr.ttb | 2 +- Tables/Text/uk.ttb | 67 + Tables/Text/vi.ttb | 2 +- Windows/libusb-1.0.nsi | 2 +- Windows/libusb.nsi | 2 +- Windows/mingw.sh | 8 +- Windows/mkwin | 8 +- absdeps.mk | 96 +- acdir/install-sh | 8 +- aclocal.m4 | 25 +- apitest.sh | 25 + autogen | 8 +- bindings.mk | 8 +- braille.mk | 12 +- brltty.spec | 185 +- brltty.spec.in | 137 +- cfg-android | 11 +- cfg-darwin | 8 +- cfg-dos | 9 +- cfg-grub | 8 +- cfg-iris | 8 +- chkhdrs | 8 +- common.mk | 12 +- config.h.in | 19 +- config.mk.in | 20 +- config.sh.in | 8 +- configure | 294 ++- configure.ac | 98 +- document.mk | 8 +- gendeps | 8 +- getrevid | 8 +- mk4build | 8 +- mkdocktb | 8 +- mkdocs | 8 +- mkpot | 8 +- mkrpm | 8 +- mktar | 8 +- mkzip | 8 +- prologue.mk | 8 +- prologue.sh | 8 +- prologue.tcl | 8 +- run-brltty | 8 +- run-command | 8 +- run-xbrlapi | 8 +- screen.mk | 10 +- speech.mk | 10 +- updusbdevs | 8 +- 1304 files changed, 11097 insertions(+), 7605 deletions(-) create mode 100644 Android/Application/res/values-da/strings.xml create mode 100644 Autostart/AppStream/Makefile.in create mode 100644 Autostart/AppStream/reldeps.mk rename Autostart/Systemd/{brltty.target => brltty.path} (65%) rename Autostart/Systemd/{brltty@.target => brltty@.path} (66%) create mode 100644 Bindings/Lisp/apisetup.lisp create mode 100755 Bindings/Lisp/apitest create mode 100644 Bindings/Lisp/apitest.lisp create mode 100755 Bindings/Python/apitest create mode 100644 Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_KEYFILE.3 create mode 100644 Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_POLKIT.3 create mode 100644 Documents/BrlAPIref/man/man3/BRLAPI_PACKET_GETMODELID.3 rename Documents/BrlAPIref/man/man3/{_tmp_mktar.1qJHCE_brltty-5.5_Programs_.3 => _tmp_mktar.Mu3gIQ_brltty-5.6_Programs_.3} (82%) create mode 100644 Documents/BrlAPIref/man/man3/brlapi__getModelIdentifier.3 create mode 100644 Documents/BrlAPIref/man/man3/brlapi_getModelIdentifier.3 create mode 100644 Drivers/Braille/EuroBraille/eu_protocoldef.h create mode 100644 Drivers/Braille/Inceptor/Makefile.in create mode 100644 Drivers/Braille/Inceptor/braille.c create mode 100644 Drivers/Braille/Inceptor/brldefs-ic.h create mode 100644 Drivers/Braille/Inceptor/reldeps.mk create mode 100644 Programs/ctb_external.c create mode 100644 Programs/ctb_louis.c create mode 100644 Programs/ctb_native.c create mode 100644 Programs/ctb_translate.h create mode 100644 Tables/Contraction/lt.ctb create mode 100644 Tables/Contraction/spaces.cti rename Tables/Input/{hw/mb1.ktb => bm/routing.kti} (86%) rename Tables/Input/hw/{mb2.ktb => B80.ktb} (84%) create mode 100644 Tables/Input/hw/BI14.ktb create mode 100644 Tables/Input/hw/BI32.ktb create mode 100644 Tables/Input/hw/BI40.ktb rename Tables/Input/hw/{kbd.kti => braille.kti} (69%) create mode 100644 Tables/Input/hw/command.kti create mode 100644 Tables/Input/hw/joystick.kti rename Tables/Input/hw/{nav.kti => thumb.kti} (50%) create mode 100644 Tables/Input/hw/touch.ktb create mode 100644 Tables/Input/ic/all.ktb create mode 100644 Tables/Text/uk.ttb create mode 100644 apitest.sh diff --git a/Android/Application/AndroidManifest.xml b/Android/Application/AndroidManifest.xml index 03181d52..b6f6e070 100644 --- a/Android/Application/AndroidManifest.xml +++ b/Android/Application/AndroidManifest.xml @@ -3,7 +3,7 @@ diff --git a/Android/Application/mksettings b/Android/Application/mksettings index 58657b1e..454a7ca0 100755 --- a/Android/Application/mksettings +++ b/Android/Application/mksettings @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Android/Application/newstrings b/Android/Application/newstrings index c46c9c3b..56a930bd 100755 --- a/Android/Application/newstrings +++ b/Android/Application/newstrings @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Android/Application/project.properties b/Android/Application/project.properties index 935a4ed4..b0336377 100644 --- a/Android/Application/project.properties +++ b/Android/Application/project.properties @@ -12,4 +12,5 @@ # Project target. target=android-21 +sdk.buildtools=21.1.2 android.library.reference.1=../Core diff --git a/Android/Application/res/values-da/strings.xml b/Android/Application/res/values-da/strings.xml new file mode 100644 index 00000000..f0d1c919 --- /dev/null +++ b/Android/Application/res/values-da/strings.xml @@ -0,0 +1,222 @@ + + + + BRLTTY + BRLTTY understøtter braille enheder. + + BRLTTY Input Service + Tastaturer på Braille enheder + + Notifikationer + Hurtig Indstillinger + Tilbage + Hjem + Seneste Apps + + BRLTTY Indstillinger + Generalle indstillinger + Håndter enheder + Advancerede indstillinger + + Navigationstilstand + Taleunderstøttelse + + Teksttabel + Attributtabel + Forkortelsestabel + Tastaturtabel + + Log Niveau + Log Kategori + Log Tilgængelighedshændelser + Log Fremkaldt skærm + Log Tastaturhændelser + + Valgte enhed + Tilføj enhed + Fjern enhed + + Ingen enheder + Enhed ikke valgt + + Enhedsnavn + Kommunikationsmetode + Vælg enhed + Braille driver + Udført + kommunikationsmetode ikke valgt + enhed ikke valgt + braille driver ikke valgt + ingen enheder + enhedsnavn allerede i brug + + Vil du virkelig gerne fjerne denne enhed ? + + ingen valgt + + Vertikal liste + To dimensionelt gitter + + Ingen + Medfødt + + Bluetooth + USB + Seriel + + Aflus + Information + Opmærksomhed + Advarsel + Fejl + Kirtisk + Alarm + Uheld + + Generisk input + Input pakker + Output pakker + Braille enhed nøglehændelser + Tastatur nøglehændelser + Markør følgning + Markør ruteplanlægning + Opdateringshændelser + Talehændelser + Asynkrone hændelser + Server hændelser + Serielt I/O + USB I/O + Bluetooth I/O + Braille-driver hændelser + Tale-driver hændelser + Skærm-river hændelser + + autofind + + lokal-baseret autovælg + Arabisk (generisk) + Assamese + Awadhi + Bulgarsk + Bihari + Bengali + Tibetansk + Braj + Braille Ready Format (for at vise .brf files i en editor eller fremviser) + Tjekkisk + Welsk + Dansk (Svend Thougaard, 2002-11-18) + Dansk + Dansk (LogText) + Tysk + Dravidian + Græsk + Engelsk (Canada) + Engelsk + Engelsk (United Kingdom) + Engelsk (Nord Amerikansk Braille Computer Code) + Engelsk (United States) + Esperanto + Spansk + Estisk + Finsk + Fransk (unified 2007) + Fransk (Canada) + Fransk (Code Braille Informatique Français Standard) + Fransk + Fransk (Frankrig) + Fransk (VisioBraille) + Irsk + Gaelic + Gondi + Gujarati + Hebraisk + Hindi + Kroatisk + Ungarnsk + Armenisk + Islandsk + Italiensk + Khasi + Kannada + Konkani + Kurukh + Litauisk + Lettisk + Malagasy + Maori + Malayalam + Manipuri + Marathi + Maltese + Munda + Marwari + Nepalesisk + Newari + Belgisk (Belgien) + Belgisk + Hollansk (Holland) + Norsk (med understøttelse for andre sprog) + Norsk + Norsk (Offentlig utvalg for punktskrift) + Newari (old) + Oriya + Panjabi + Pali + Polsk + Portugisisk + Romansk + Russisk + Sanskrit + Santali + Sindhi + Slovakisk + Slovensk + Svensk (1989 standard) + Svensk (1996 standard) + Svensk + Swahili + Tamil + Telugu + Tyrkisk + Vietnamesisk + + inverteret forgrundsfarve i venstre søjle og baggrundsfarve i højre søjle + forgrundsfarve i venstre søjle og baggrundsfarve i højre søjle + forgrundsfarve i øverste firkant og baggrundsfarve i nederste firkant + + Afrikaans (forkortet) + Amharic (uforkortet) + Tysk (uforkortet) + Tysk (forkortet - 1998 standard) + Tysk (basis forkortelser) + Engelsk (Unified English Braille, grade 2) + Engelsk (US, grade 2) + Spansk (grade 2) + Fransk (forkortet) + Fransk (uforkortet) + Hausa (forkortet) + Indonesisk (forkortet) + Intertionale aonetiske alfabet + Japansk (uforkortet) + Koreansk (grade 1) + Koreansk (grade 2) + Koreansk (uforkortet) + Malaisisk (forkortet) + Munda (forkortet) + Belgisk (forkortet) + Chichewa (forkortet) + Portugiskisk (grade 2) + Sinhalese (uforkortet) + Swahili (forkortet) + Thailandsk (Forkortet) + Kinesisk (Taiwan, uforkortet) + Kinesisk (Taiwan, Unique Chinese Braille) + Zulu (forkortet) + + genveje for braille tastaturer + genveje for hele tastaturer + genveje for taste-baseret navigation + genveje for tastaturer uden nummerisk tastatur + genveje for Sun Type 6 tastaturer + diff --git a/Android/Application/res/values/settings_lists.xml b/Android/Application/res/values/settings_lists.xml index df371662..3db5a12c 100644 --- a/Android/Application/res/values/settings_lists.xml +++ b/Android/Application/res/values/settings_lists.xml @@ -20,6 +20,7 @@ HIMS HandyTech HumanWare + Inceptor Iris Libbraille LogText @@ -61,6 +62,7 @@ @string/BRAILLE_DRIVER_LABEL_hm @string/BRAILLE_DRIVER_LABEL_ht @string/BRAILLE_DRIVER_LABEL_hw + @string/BRAILLE_DRIVER_LABEL_ic @string/BRAILLE_DRIVER_LABEL_ir @string/BRAILLE_DRIVER_LABEL_lb @string/BRAILLE_DRIVER_LABEL_lt @@ -103,6 +105,7 @@ hm ht hw + ic ir lb lt @@ -211,6 +214,7 @@ Tamil Telugu Turkish + Ukrainian Vietnamese @@ -300,6 +304,7 @@ @string/TEXT_TABLE_LABEL_ta @string/TEXT_TABLE_LABEL_te @string/TEXT_TABLE_LABEL_tr + @string/TEXT_TABLE_LABEL_uk @string/TEXT_TABLE_LABEL_vi @@ -390,6 +395,7 @@ ta te tr + uk vi @@ -426,6 +432,7 @@ Korean (uncontracted) Korean (grade 1) Korean (grade 2) + Lithuanian (uncontracted) Malagasy (contracted) Munda (contracted) Dutch (contracted) @@ -456,6 +463,7 @@ @string/CONTRACTION_TABLE_LABEL_ko @string/CONTRACTION_TABLE_LABEL_ko_g1 @string/CONTRACTION_TABLE_LABEL_ko_g2 + @string/CONTRACTION_TABLE_LABEL_lt @string/CONTRACTION_TABLE_LABEL_mg @string/CONTRACTION_TABLE_LABEL_mun @string/CONTRACTION_TABLE_LABEL_nl @@ -487,6 +495,7 @@ ko ko-g1 ko-g2 + lt mg mun nl diff --git a/Android/Application/res/xml/usb_devices.xml b/Android/Application/res/xml/usb_devices.xml index b5a22e3b..52fa3271 100644 --- a/Android/Application/res/xml/usb_devices.xml +++ b/Android/Application/res/xml/usb_devices.xml @@ -72,6 +72,10 @@ + + + + @@ -145,6 +149,7 @@ + @@ -267,6 +272,10 @@ + + + + @@ -276,7 +285,7 @@ - + diff --git a/Android/Application/src/org/a11y/brltty/android/ApplicationHooks.java b/Android/Application/src/org/a11y/brltty/android/ApplicationHooks.java index 86ee6b0b..e0749a3f 100644 --- a/Android/Application/src/org/a11y/brltty/android/ApplicationHooks.java +++ b/Android/Application/src/org/a11y/brltty/android/ApplicationHooks.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ApplicationParameters.java b/Android/Application/src/org/a11y/brltty/android/ApplicationParameters.java index 240329a5..762988e9 100644 --- a/Android/Application/src/org/a11y/brltty/android/ApplicationParameters.java +++ b/Android/Application/src/org/a11y/brltty/android/ApplicationParameters.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ApplicationUtilities.java b/Android/Application/src/org/a11y/brltty/android/ApplicationUtilities.java index 375dea24..033be590 100644 --- a/Android/Application/src/org/a11y/brltty/android/ApplicationUtilities.java +++ b/Android/Application/src/org/a11y/brltty/android/ApplicationUtilities.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/BluetoothConnection.java b/Android/Application/src/org/a11y/brltty/android/BluetoothConnection.java index 61e56ac2..ecd6be12 100644 --- a/Android/Application/src/org/a11y/brltty/android/BluetoothConnection.java +++ b/Android/Application/src/org/a11y/brltty/android/BluetoothConnection.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/BrailleRenderer.java b/Android/Application/src/org/a11y/brltty/android/BrailleRenderer.java index 30d417d9..71ef432b 100644 --- a/Android/Application/src/org/a11y/brltty/android/BrailleRenderer.java +++ b/Android/Application/src/org/a11y/brltty/android/BrailleRenderer.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/BrailleService.java b/Android/Application/src/org/a11y/brltty/android/BrailleService.java index 5b848ae5..9f5380c6 100644 --- a/Android/Application/src/org/a11y/brltty/android/BrailleService.java +++ b/Android/Application/src/org/a11y/brltty/android/BrailleService.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/CoreThread.java b/Android/Application/src/org/a11y/brltty/android/CoreThread.java index 4c0c2362..2460db7c 100644 --- a/Android/Application/src/org/a11y/brltty/android/CoreThread.java +++ b/Android/Application/src/org/a11y/brltty/android/CoreThread.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/GridBrailleRenderer.java b/Android/Application/src/org/a11y/brltty/android/GridBrailleRenderer.java index a847ab42..921eb5c0 100644 --- a/Android/Application/src/org/a11y/brltty/android/GridBrailleRenderer.java +++ b/Android/Application/src/org/a11y/brltty/android/GridBrailleRenderer.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/InputService.java b/Android/Application/src/org/a11y/brltty/android/InputService.java index cd23c6ee..e8533058 100644 --- a/Android/Application/src/org/a11y/brltty/android/InputService.java +++ b/Android/Application/src/org/a11y/brltty/android/InputService.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/LanguageUtilities.java b/Android/Application/src/org/a11y/brltty/android/LanguageUtilities.java index d979830c..bc9dd50c 100644 --- a/Android/Application/src/org/a11y/brltty/android/LanguageUtilities.java +++ b/Android/Application/src/org/a11y/brltty/android/LanguageUtilities.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ListBrailleRenderer.java b/Android/Application/src/org/a11y/brltty/android/ListBrailleRenderer.java index a3b03c0c..f4280a7e 100644 --- a/Android/Application/src/org/a11y/brltty/android/ListBrailleRenderer.java +++ b/Android/Application/src/org/a11y/brltty/android/ListBrailleRenderer.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/LockUtilities.java b/Android/Application/src/org/a11y/brltty/android/LockUtilities.java index 0cddced8..fc5b539e 100644 --- a/Android/Application/src/org/a11y/brltty/android/LockUtilities.java +++ b/Android/Application/src/org/a11y/brltty/android/LockUtilities.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/PcmDevice.java b/Android/Application/src/org/a11y/brltty/android/PcmDevice.java index 2252a81b..b482de57 100644 --- a/Android/Application/src/org/a11y/brltty/android/PcmDevice.java +++ b/Android/Application/src/org/a11y/brltty/android/PcmDevice.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/RealScreenElement.java b/Android/Application/src/org/a11y/brltty/android/RealScreenElement.java index e0a821d7..63f1c9b8 100644 --- a/Android/Application/src/org/a11y/brltty/android/RealScreenElement.java +++ b/Android/Application/src/org/a11y/brltty/android/RealScreenElement.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/RenderedScreen.java b/Android/Application/src/org/a11y/brltty/android/RenderedScreen.java index b42ace52..f1a029b8 100644 --- a/Android/Application/src/org/a11y/brltty/android/RenderedScreen.java +++ b/Android/Application/src/org/a11y/brltty/android/RenderedScreen.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenDriver.java b/Android/Application/src/org/a11y/brltty/android/ScreenDriver.java index 9735a532..f6de2758 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenDriver.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenDriver.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenElement.java b/Android/Application/src/org/a11y/brltty/android/ScreenElement.java index 8125c377..8aea7f2d 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenElement.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenElement.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenElementList.java b/Android/Application/src/org/a11y/brltty/android/ScreenElementList.java index cf78894d..20f7e769 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenElementList.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenElementList.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenLogger.java b/Android/Application/src/org/a11y/brltty/android/ScreenLogger.java index b107daef..e3cd8b7a 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenLogger.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenLogger.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenNodeTester.java b/Android/Application/src/org/a11y/brltty/android/ScreenNodeTester.java index 3d0af689..7cf4cf05 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenNodeTester.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenNodeTester.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenTextEditor.java b/Android/Application/src/org/a11y/brltty/android/ScreenTextEditor.java index 9b5afcb0..20f9ab1c 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenTextEditor.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenTextEditor.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenUtilities.java b/Android/Application/src/org/a11y/brltty/android/ScreenUtilities.java index 83fb0f5b..f42374ae 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenUtilities.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenUtilities.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/ScreenWindow.java b/Android/Application/src/org/a11y/brltty/android/ScreenWindow.java index 410f51cc..68add95a 100644 --- a/Android/Application/src/org/a11y/brltty/android/ScreenWindow.java +++ b/Android/Application/src/org/a11y/brltty/android/ScreenWindow.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/SettingsActivity.java b/Android/Application/src/org/a11y/brltty/android/SettingsActivity.java index 879c523d..ed553dbb 100644 --- a/Android/Application/src/org/a11y/brltty/android/SettingsActivity.java +++ b/Android/Application/src/org/a11y/brltty/android/SettingsActivity.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/SingletonReference.java b/Android/Application/src/org/a11y/brltty/android/SingletonReference.java index 574d4ab2..fcf008b2 100644 --- a/Android/Application/src/org/a11y/brltty/android/SingletonReference.java +++ b/Android/Application/src/org/a11y/brltty/android/SingletonReference.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/SpeechDriver.java b/Android/Application/src/org/a11y/brltty/android/SpeechDriver.java index d9d3e0ad..120a9d45 100644 --- a/Android/Application/src/org/a11y/brltty/android/SpeechDriver.java +++ b/Android/Application/src/org/a11y/brltty/android/SpeechDriver.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/StringMaker.java b/Android/Application/src/org/a11y/brltty/android/StringMaker.java index 2e3d47ca..9a2075a0 100644 --- a/Android/Application/src/org/a11y/brltty/android/StringMaker.java +++ b/Android/Application/src/org/a11y/brltty/android/StringMaker.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/SystemServiceReference.java b/Android/Application/src/org/a11y/brltty/android/SystemServiceReference.java index 08a29522..8fba9d43 100644 --- a/Android/Application/src/org/a11y/brltty/android/SystemServiceReference.java +++ b/Android/Application/src/org/a11y/brltty/android/SystemServiceReference.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/UsbHelper.java b/Android/Application/src/org/a11y/brltty/android/UsbHelper.java index f8fb9f6c..368f77ec 100644 --- a/Android/Application/src/org/a11y/brltty/android/UsbHelper.java +++ b/Android/Application/src/org/a11y/brltty/android/UsbHelper.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Application/src/org/a11y/brltty/android/VirtualScreenElement.java b/Android/Application/src/org/a11y/brltty/android/VirtualScreenElement.java index a8d3a703..f93767c5 100644 --- a/Android/Application/src/org/a11y/brltty/android/VirtualScreenElement.java +++ b/Android/Application/src/org/a11y/brltty/android/VirtualScreenElement.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Core/Makefile b/Android/Core/Makefile index e92614b4..9c6848b2 100644 --- a/Android/Core/Makefile +++ b/Android/Core/Makefile @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Android/Core/src/org/a11y/brltty/core/ArgumentsBuilder.java b/Android/Core/src/org/a11y/brltty/core/ArgumentsBuilder.java index 4b628ea7..43161391 100644 --- a/Android/Core/src/org/a11y/brltty/core/ArgumentsBuilder.java +++ b/Android/Core/src/org/a11y/brltty/core/ArgumentsBuilder.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Core/src/org/a11y/brltty/core/CoreWrapper.java b/Android/Core/src/org/a11y/brltty/core/CoreWrapper.java index 6b0c6c16..0e9fe6ee 100644 --- a/Android/Core/src/org/a11y/brltty/core/CoreWrapper.java +++ b/Android/Core/src/org/a11y/brltty/core/CoreWrapper.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Core/src/org/a11y/brltty/core/LogLevel.java b/Android/Core/src/org/a11y/brltty/core/LogLevel.java index 823761a9..9f7b7744 100644 --- a/Android/Core/src/org/a11y/brltty/core/LogLevel.java +++ b/Android/Core/src/org/a11y/brltty/core/LogLevel.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/Core/src/org/a11y/brltty/core/ProgramExitStatus.java b/Android/Core/src/org/a11y/brltty/core/ProgramExitStatus.java index 0c1a5648..efd24b8d 100644 --- a/Android/Core/src/org/a11y/brltty/core/ProgramExitStatus.java +++ b/Android/Core/src/org/a11y/brltty/core/ProgramExitStatus.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Android/TRANSLATORS b/Android/TRANSLATORS index 9b65f219..0c008848 100644 --- a/Android/TRANSLATORS +++ b/Android/TRANSLATORS @@ -1,4 +1,5 @@ cs Petr Řehák +da Ole Guldberg de Dietmar Segbert de Mario Lang en Dave Mielke diff --git a/Autostart/AppStream/Makefile.in b/Autostart/AppStream/Makefile.in new file mode 100644 index 00000000..d370d9b9 --- /dev/null +++ b/Autostart/AppStream/Makefile.in @@ -0,0 +1,30 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +METAINFO_DIRECTORY = $(INSTALL_ROOT)$(datadir)/metainfo +METAINFO_FILE = org.a11y.brltty.metainfo.xml + +install-metainfo-directory: + $(INSTALL_DIRECTORY) $(METAINFO_DIRECTORY) + +install: install-metainfo-directory + $(INSTALL_DATA) $(SRC_TOP)Autostart/AppStream/$(METAINFO_FILE) $(METAINFO_DIRECTORY) + +uninstall: + -rm -f $(METAINFO_DIRECTORY)/$(METAINFO_FILE) + diff --git a/Autostart/AppStream/org.a11y.brltty.metainfo.xml b/Autostart/AppStream/org.a11y.brltty.metainfo.xml index bd8fcc8e..a5408881 100644 --- a/Autostart/AppStream/org.a11y.brltty.metainfo.xml +++ b/Autostart/AppStream/org.a11y.brltty.metainfo.xml @@ -1,7 +1,7 @@ usb:v045Ep930B* + + + usb:v0483pA1D3* + usb:v06B0p0001* @@ -180,6 +184,7 @@ usb:v0904p3000* + usb:v0904p3001* @@ -302,6 +307,10 @@ usb:v1148p0301* + + + usb:v1209pABC0* + usb:v1C71pC004* @@ -311,7 +320,7 @@ usb:v1C71pC005* - + usb:v1C71pC006* diff --git a/Autostart/AppStream/reldeps.mk b/Autostart/AppStream/reldeps.mk new file mode 100644 index 00000000..e69de29b diff --git a/Autostart/Hotplug/brltty b/Autostart/Hotplug/brltty index 4cf5731a..59e20c86 100755 --- a/Autostart/Hotplug/brltty +++ b/Autostart/Hotplug/brltty @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Autostart/Hotplug/brltty.usermap b/Autostart/Hotplug/brltty.usermap index 7273521e..ad938810 100644 --- a/Autostart/Hotplug/brltty.usermap +++ b/Autostart/Hotplug/brltty.usermap @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -87,6 +87,10 @@ brltty 0x0003 0x045e 0x930a # HIMS [Braille Edge] brltty 0x0003 0x045e 0x930b +# Device: 0483:A1D3 +# Baum [Orbit 20 (20 cells)] +brltty 0x0003 0x0483 0xa1d3 + # Device: 06B0:0001 # Alva [Satellite (5nn)] brltty 0x0003 0x06b0 0x0001 @@ -160,6 +164,7 @@ brltty 0x0003 0x0904 0x2016 brltty 0x0003 0x0904 0x3000 # Device: 0904:3001 +# Baum [Orbit in Refreshabraille Emulation Mode (18 cells)] # Baum [Refreshabraille 18 (18 cells)] brltty 0x0003 0x0904 0x3001 @@ -282,6 +287,10 @@ brltty 0x0003 0x10c4 0xea80 # BrailleMemo [Smart] brltty 0x0003 0x1148 0x0301 +# Device: 1209:ABC0 +# Inceptor [all models] +brltty 0x0003 0x1209 0xabc0 + # Device: 1C71:C004 # BrailleNote [HumanWare APEX] brltty 0x0003 0x1c71 0xc004 @@ -291,7 +300,7 @@ brltty 0x0003 0x1c71 0xc004 brltty 0x0003 0x1c71 0xc005 # Device: 1C71:C006 -# HumanWare [all models (HID protocol)] +# HumanWare [non-Touch models (HID protocol)] brltty 0x0003 0x1c71 0xc006 # Device: 1C71:C00A diff --git a/Autostart/Systemd/Makefile.in b/Autostart/Systemd/Makefile.in index 0e44f687..b940470b 100644 --- a/Autostart/Systemd/Makefile.in +++ b/Autostart/Systemd/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -25,7 +25,7 @@ install-units-directory: $(INSTALL_DIRECTORY) $(SYSTEMD_UNITS_DIRECTORY) install-units: install-units-directory - for extension in service target; do \ + for extension in service path; do \ $(INSTALL_DATA) $(SRC_DIR)/*.$$extension $(SYSTEMD_UNITS_DIRECTORY); \ done @@ -40,3 +40,6 @@ uninstall: -rm -f $(SYSTEMD_UNITS_DIRECTORY)/$(PACKAGE_TARNAME)@.* -rm -f $(SYSTEMD_SCRIPTS_DIRECTORY)/$(PACKAGE_TARNAME)-systemd-* +reload: + systemctl daemon-reload + diff --git a/Autostart/Systemd/brltty-systemd-wrapper b/Autostart/Systemd/brltty-systemd-wrapper index dcaa70d6..a81ce250 100755 --- a/Autostart/Systemd/brltty-systemd-wrapper +++ b/Autostart/Systemd/brltty-systemd-wrapper @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -23,22 +23,31 @@ readonly programName="${0##*/}" programMessage() { local message="${1}" + local level="${2}" + logger -p "daemon.${level:-info}" -t "${programName}" -- "${1}" && + [ ! -t 2 ] || echo >&2 "${programName}: ${message}" } +errorMessage() { + local message="${1}" + local code="${2}" + + programMessage "${message}" err + exit "${code:-1}" +} + syntaxError() { local message="${1}" - programMessage "${message}" - exit 2 + errorMessage "${message}" 2 } semanticError() { local message="${1}" - programMessage "${message}" - exit 3 + errorMessage "${message}" 3 } readonly currentInstance="${BRLTTY_SYSTEMD_INSTANCE:-${defaultInstance}}" @@ -75,6 +84,6 @@ else fi set -- "${BRLTTY_EXECUTABLE_PATH:-brltty}" -E ${BRLTTY_EXECUTABLE_ARGUMENTS} "${@}" -programMessage "starting executable: ${*}" +programMessage "starting executable: ${*}" info exec "${@}" exit "${?}" diff --git a/Autostart/Systemd/brltty.target b/Autostart/Systemd/brltty.path similarity index 65% rename from Autostart/Systemd/brltty.target rename to Autostart/Systemd/brltty.path index fe37839b..c8a9fc67 100644 --- a/Autostart/Systemd/brltty.target +++ b/Autostart/Systemd/brltty.path @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -20,6 +20,10 @@ Description=Default BRLTTY Instance Requires=brltty@-etc-brltty.conf.service +[Path] +PathExists=/etc/brltty.conf +Unit=brltty@-etc-brltty.conf.service + [Install] WantedBy=sysinit.target diff --git a/Autostart/Systemd/brltty@.target b/Autostart/Systemd/brltty@.path similarity index 66% rename from Autostart/Systemd/brltty@.target rename to Autostart/Systemd/brltty@.path index 5f46f183..820bc564 100644 --- a/Autostart/Systemd/brltty@.target +++ b/Autostart/Systemd/brltty@.path @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -20,6 +20,10 @@ Description=BRLTTY (using configuration file /etc/brltty_%I.conf) Requires=brltty@-etc-brltty_%i.conf.service +[Path] +PathExists=/etc/brltty_%I.conf +Unit=brltty@-etc-brltty_%i.conf.service + [Install] WantedBy=sysinit.target diff --git a/Autostart/Systemd/brltty@.service.in b/Autostart/Systemd/brltty@.service.in index 3838c864..062cfec8 100644 --- a/Autostart/Systemd/brltty@.service.in +++ b/Autostart/Systemd/brltty@.service.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Autostart/Udev/Makefile.in b/Autostart/Udev/Makefile.in index ee34cb73..b47e60da 100644 --- a/Autostart/Udev/Makefile.in +++ b/Autostart/Udev/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -47,3 +47,6 @@ uninstall: -rm -f $(UDEV_RULES_DIRECTORY)/?*-$(PACKAGE_TARNAME).$(UDEV_RULES_EXTENSION) -rm -f $(UDEV_LIBRARY_DIRECTORY)/$(PACKAGE_TARNAME)-* +reload: + udevadm control --reload + diff --git a/Autostart/Udev/brltty-wrapper b/Autostart/Udev/brltty-wrapper index 9ae45a2e..8711a449 100755 --- a/Autostart/Udev/brltty-wrapper +++ b/Autostart/Udev/brltty-wrapper @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Autostart/Udev/rules b/Autostart/Udev/rules index 4df9d7e6..af6146ca 100644 --- a/Autostart/Udev/rules +++ b/Autostart/Udev/rules @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -94,6 +94,10 @@ ENV{PRODUCT}=="45e/930a/*", ENV{BRLTTY_BRAILLE_DRIVER}="hm", GOTO="brltty_usb_ru # HIMS [Braille Edge] ENV{PRODUCT}=="45e/930b/*", ENV{BRLTTY_BRAILLE_DRIVER}="hm", GOTO="brltty_usb_run" +# Device: 0483:A1D3 +# Baum [Orbit 20 (20 cells)] +ENV{PRODUCT}=="483/a1d3/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run" + # Device: 06B0:0001 # Alva [Satellite (5nn)] ENV{PRODUCT}=="6b0/1/*", ENV{BRLTTY_BRAILLE_DRIVER}="al", GOTO="brltty_usb_run" @@ -167,6 +171,7 @@ ENV{PRODUCT}=="904/2016/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_ru ENV{PRODUCT}=="904/3000/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run" # Device: 0904:3001 +# Baum [Orbit in Refreshabraille Emulation Mode (18 cells)] # Baum [Refreshabraille 18 (18 cells)] ENV{PRODUCT}=="904/3001/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run" @@ -289,6 +294,10 @@ ENV{PRODUCT}=="10c4/ea80/*", ENV{BRLTTY_BRAILLE_DRIVER}="sk", GOTO="brltty_usb_r # BrailleMemo [Smart] ENV{PRODUCT}=="1148/301/*", ENV{BRLTTY_BRAILLE_DRIVER}="mm", GOTO="brltty_usb_run" +# Device: 1209:ABC0 +# Inceptor [all models] +ENV{PRODUCT}=="1209/abc0/*", ENV{BRLTTY_BRAILLE_DRIVER}="ic", GOTO="brltty_usb_run" + # Device: 1C71:C004 # BrailleNote [HumanWare APEX] ENV{PRODUCT}=="1c71/c004/*", ENV{BRLTTY_BRAILLE_DRIVER}="bn", GOTO="brltty_usb_run" @@ -298,7 +307,7 @@ ENV{PRODUCT}=="1c71/c004/*", ENV{BRLTTY_BRAILLE_DRIVER}="bn", GOTO="brltty_usb_r ENV{PRODUCT}=="1c71/c005/*", ENV{BRLTTY_BRAILLE_DRIVER}="hw", GOTO="brltty_usb_run" # Device: 1C71:C006 -# HumanWare [all models (HID protocol)] +# HumanWare [non-Touch models (HID protocol)] ENV{PRODUCT}=="1c71/c006/*", ENV{BRLTTY_BRAILLE_DRIVER}="hw", GOTO="brltty_usb_run" # Device: 1C71:C00A diff --git a/Autostart/Windows/brltty-libusb-1.0.inf b/Autostart/Windows/brltty-libusb-1.0.inf index d2ed6d44..7a29a027 100644 --- a/Autostart/Windows/brltty-libusb-1.0.inf +++ b/Autostart/Windows/brltty-libusb-1.0.inf @@ -90,6 +90,9 @@ HKR,,Icon,,-20 ; Device: 045E:930B "LibUSB-1.0: HIMS [Braille Edge]"=LIBUSB_DEV, USB\VID_045E&PID_930B +; Device: 0483:A1D3 +"LibUSB-1.0: Baum [Orbit 20 (20 cells)]"=LIBUSB_DEV, USB\VID_0483&PID_A1D3 + ; Device: 06B0:0001 "LibUSB-1.0: Alva [Satellite (5nn)]"=LIBUSB_DEV, USB\VID_06B0&PID_0001 @@ -145,7 +148,7 @@ HKR,,Icon,,-20 "LibUSB-1.0: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3000 ; Device: 0904:3001 -"LibUSB-1.0: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 +"LibUSB-1.0: Baum [Orbit in Refreshabraille Emulation Mode (18 cells)], Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 ; Device: 0904:4004 "LibUSB-1.0: Baum [Pronto! V3 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_4004 @@ -237,6 +240,9 @@ HKR,,Icon,,-20 ; Device: 1148:0301 "LibUSB-1.0: BrailleMemo [Smart]"=LIBUSB_DEV, USB\VID_1148&PID_0301 +; Device: 1209:ABC0 +"LibUSB-1.0: Inceptor [all models]"=LIBUSB_DEV, USB\VID_1209&PID_ABC0 + ; Device: 1C71:C004 "LibUSB-1.0: BrailleNote [HumanWare APEX]"=LIBUSB_DEV, USB\VID_1C71&PID_C004 @@ -244,7 +250,7 @@ HKR,,Icon,,-20 "LibUSB-1.0: HumanWare [all models (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C005 ; Device: 1C71:C006 -"LibUSB-1.0: HumanWare [all models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 +"LibUSB-1.0: HumanWare [non-Touch models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 ; Device: 1C71:C00A "LibUSB-1.0: HumanWare [BrailleNote Touch (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C00A @@ -401,6 +407,9 @@ HKR,,Icon,,-20 ; Device: 045E:930B "LibUSB-1.0: HIMS [Braille Edge]"=LIBUSB_DEV, USB\VID_045E&PID_930B +; Device: 0483:A1D3 +"LibUSB-1.0: Baum [Orbit 20 (20 cells)]"=LIBUSB_DEV, USB\VID_0483&PID_A1D3 + ; Device: 06B0:0001 "LibUSB-1.0: Alva [Satellite (5nn)]"=LIBUSB_DEV, USB\VID_06B0&PID_0001 @@ -456,7 +465,7 @@ HKR,,Icon,,-20 "LibUSB-1.0: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3000 ; Device: 0904:3001 -"LibUSB-1.0: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 +"LibUSB-1.0: Baum [Orbit in Refreshabraille Emulation Mode (18 cells)], Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 ; Device: 0904:4004 "LibUSB-1.0: Baum [Pronto! V3 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_4004 @@ -548,6 +557,9 @@ HKR,,Icon,,-20 ; Device: 1148:0301 "LibUSB-1.0: BrailleMemo [Smart]"=LIBUSB_DEV, USB\VID_1148&PID_0301 +; Device: 1209:ABC0 +"LibUSB-1.0: Inceptor [all models]"=LIBUSB_DEV, USB\VID_1209&PID_ABC0 + ; Device: 1C71:C004 "LibUSB-1.0: BrailleNote [HumanWare APEX]"=LIBUSB_DEV, USB\VID_1C71&PID_C004 @@ -555,7 +567,7 @@ HKR,,Icon,,-20 "LibUSB-1.0: HumanWare [all models (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C005 ; Device: 1C71:C006 -"LibUSB-1.0: HumanWare [all models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 +"LibUSB-1.0: HumanWare [non-Touch models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 ; Device: 1C71:C00A "LibUSB-1.0: HumanWare [BrailleNote Touch (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C00A diff --git a/Autostart/Windows/brltty-libusb.inf b/Autostart/Windows/brltty-libusb.inf index c42a4d4b..d75128e2 100644 --- a/Autostart/Windows/brltty-libusb.inf +++ b/Autostart/Windows/brltty-libusb.inf @@ -177,6 +177,9 @@ ServiceBinary = %12%\libusb0_x64.sys ; Device: 045E:930B "LibUSB-Win32: HIMS [Braille Edge]"=LIBUSB_DEV, USB\VID_045E&PID_930B +; Device: 0483:A1D3 +"LibUSB-Win32: Baum [Orbit 20 (20 cells)]"=LIBUSB_DEV, USB\VID_0483&PID_A1D3 + ; Device: 06B0:0001 "LibUSB-Win32: Alva [Satellite (5nn)]"=LIBUSB_DEV, USB\VID_06B0&PID_0001 @@ -232,7 +235,7 @@ ServiceBinary = %12%\libusb0_x64.sys "LibUSB-Win32: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3000 ; Device: 0904:3001 -"LibUSB-Win32: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 +"LibUSB-Win32: Baum [Orbit in Refreshabraille Emulation Mode (18 cells)], Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 ; Device: 0904:4004 "LibUSB-Win32: Baum [Pronto! V3 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_4004 @@ -324,6 +327,9 @@ ServiceBinary = %12%\libusb0_x64.sys ; Device: 1148:0301 "LibUSB-Win32: BrailleMemo [Smart]"=LIBUSB_DEV, USB\VID_1148&PID_0301 +; Device: 1209:ABC0 +"LibUSB-Win32: Inceptor [all models]"=LIBUSB_DEV, USB\VID_1209&PID_ABC0 + ; Device: 1C71:C004 "LibUSB-Win32: BrailleNote [HumanWare APEX]"=LIBUSB_DEV, USB\VID_1C71&PID_C004 @@ -331,7 +337,7 @@ ServiceBinary = %12%\libusb0_x64.sys "LibUSB-Win32: HumanWare [all models (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C005 ; Device: 1C71:C006 -"LibUSB-Win32: HumanWare [all models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 +"LibUSB-Win32: HumanWare [non-Touch models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 ; Device: 1C71:C00A "LibUSB-Win32: HumanWare [BrailleNote Touch (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C00A @@ -488,6 +494,9 @@ ServiceBinary = %12%\libusb0_x64.sys ; Device: 045E:930B "LibUSB-Win32: HIMS [Braille Edge]"=LIBUSB_DEV, USB\VID_045E&PID_930B +; Device: 0483:A1D3 +"LibUSB-Win32: Baum [Orbit 20 (20 cells)]"=LIBUSB_DEV, USB\VID_0483&PID_A1D3 + ; Device: 06B0:0001 "LibUSB-Win32: Alva [Satellite (5nn)]"=LIBUSB_DEV, USB\VID_06B0&PID_0001 @@ -543,7 +552,7 @@ ServiceBinary = %12%\libusb0_x64.sys "LibUSB-Win32: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3000 ; Device: 0904:3001 -"LibUSB-Win32: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 +"LibUSB-Win32: Baum [Orbit in Refreshabraille Emulation Mode (18 cells)], Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 ; Device: 0904:4004 "LibUSB-Win32: Baum [Pronto! V3 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_4004 @@ -635,6 +644,9 @@ ServiceBinary = %12%\libusb0_x64.sys ; Device: 1148:0301 "LibUSB-Win32: BrailleMemo [Smart]"=LIBUSB_DEV, USB\VID_1148&PID_0301 +; Device: 1209:ABC0 +"LibUSB-Win32: Inceptor [all models]"=LIBUSB_DEV, USB\VID_1209&PID_ABC0 + ; Device: 1C71:C004 "LibUSB-Win32: BrailleNote [HumanWare APEX]"=LIBUSB_DEV, USB\VID_1C71&PID_C004 @@ -642,7 +654,7 @@ ServiceBinary = %12%\libusb0_x64.sys "LibUSB-Win32: HumanWare [all models (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C005 ; Device: 1C71:C006 -"LibUSB-Win32: HumanWare [all models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 +"LibUSB-Win32: HumanWare [non-Touch models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 ; Device: 1C71:C00A "LibUSB-Win32: HumanWare [BrailleNote Touch (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C00A @@ -799,6 +811,9 @@ ServiceBinary = %12%\libusb0_x64.sys ; Device: 045E:930B "LibUSB-Win32: HIMS [Braille Edge]"=LIBUSB_DEV, USB\VID_045E&PID_930B +; Device: 0483:A1D3 +"LibUSB-Win32: Baum [Orbit 20 (20 cells)]"=LIBUSB_DEV, USB\VID_0483&PID_A1D3 + ; Device: 06B0:0001 "LibUSB-Win32: Alva [Satellite (5nn)]"=LIBUSB_DEV, USB\VID_06B0&PID_0001 @@ -854,7 +869,7 @@ ServiceBinary = %12%\libusb0_x64.sys "LibUSB-Win32: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3000 ; Device: 0904:3001 -"LibUSB-Win32: Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 +"LibUSB-Win32: Baum [Orbit in Refreshabraille Emulation Mode (18 cells)], Baum [Refreshabraille 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_3001 ; Device: 0904:4004 "LibUSB-Win32: Baum [Pronto! V3 18 (18 cells)]"=LIBUSB_DEV, USB\VID_0904&PID_4004 @@ -946,6 +961,9 @@ ServiceBinary = %12%\libusb0_x64.sys ; Device: 1148:0301 "LibUSB-Win32: BrailleMemo [Smart]"=LIBUSB_DEV, USB\VID_1148&PID_0301 +; Device: 1209:ABC0 +"LibUSB-Win32: Inceptor [all models]"=LIBUSB_DEV, USB\VID_1209&PID_ABC0 + ; Device: 1C71:C004 "LibUSB-Win32: BrailleNote [HumanWare APEX]"=LIBUSB_DEV, USB\VID_1C71&PID_C004 @@ -953,7 +971,7 @@ ServiceBinary = %12%\libusb0_x64.sys "LibUSB-Win32: HumanWare [all models (serial protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C005 ; Device: 1C71:C006 -"LibUSB-Win32: HumanWare [all models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 +"LibUSB-Win32: HumanWare [non-Touch models (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C006 ; Device: 1C71:C00A "LibUSB-Win32: HumanWare [BrailleNote Touch (HID protocol)]"=LIBUSB_DEV, USB\VID_1C71&PID_C00A diff --git a/Bindings/Java/Brlapi.java b/Bindings/Java/Brlapi.java index 8d300695..8a18af3c 100644 --- a/Bindings/Java/Brlapi.java +++ b/Bindings/Java/Brlapi.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * diff --git a/Bindings/Java/ConnectionSettings.java b/Bindings/Java/ConnectionSettings.java index b23cb814..7bec5d52 100644 --- a/Bindings/Java/ConnectionSettings.java +++ b/Bindings/Java/ConnectionSettings.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * diff --git a/Bindings/Java/DisplaySize.java b/Bindings/Java/DisplaySize.java index 9c8d289d..068d4f80 100644 --- a/Bindings/Java/DisplaySize.java +++ b/Bindings/Java/DisplaySize.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * diff --git a/Bindings/Java/Error.java b/Bindings/Java/Error.java index 502787c2..9b903c7d 100644 --- a/Bindings/Java/Error.java +++ b/Bindings/Java/Error.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * diff --git a/Bindings/Java/Exception.java b/Bindings/Java/Exception.java index 1386aec9..6bc8386c 100644 --- a/Bindings/Java/Exception.java +++ b/Bindings/Java/Exception.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * diff --git a/Bindings/Java/Key.java b/Bindings/Java/Key.java index 59bcc6e2..f20f8ab4 100644 --- a/Bindings/Java/Key.java +++ b/Bindings/Java/Key.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * diff --git a/Bindings/Java/Makefile.in b/Bindings/Java/Makefile.in index 3a1d65fe..b0a6e1c2 100644 --- a/Bindings/Java/Makefile.in +++ b/Bindings/Java/Makefile.in @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by +# Copyright (C) 2006-2018 by # Samuel Thibault # Sébastien Hinderer # diff --git a/Bindings/Java/Native.java b/Bindings/Java/Native.java index 45c5163f..daabd41d 100644 --- a/Bindings/Java/Native.java +++ b/Bindings/Java/Native.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -33,6 +33,7 @@ public class Native { public native void closeConnection (); public native String getDriverName () throws Error; + public native DisplaySize getModelIdentifier () throws Error; public native DisplaySize getDisplaySize () throws Error; public native int enterTtyMode (int tty, String driver) throws Error; diff --git a/Bindings/Java/Test.java b/Bindings/Java/Test.java index e9ec5720..6549f5bb 100644 --- a/Bindings/Java/Test.java +++ b/Bindings/Java/Test.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -55,6 +55,9 @@ public class Test implements Constants { System.out.print("Driver is " + brlapi.getDriverName()); System.out.println(); + System.out.print("Model is " + brlapi.getModelIdentifier()); + System.out.println(); + DisplaySize size = brlapi.getDisplaySize(); System.out.println("Display size is " + size.getWidth() + "x" + size.getHeight()); diff --git a/Bindings/Java/WriteArguments.java b/Bindings/Java/WriteArguments.java index 9a051c20..9f50de9c 100644 --- a/Bindings/Java/WriteArguments.java +++ b/Bindings/Java/WriteArguments.java @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * diff --git a/Bindings/Java/apitest b/Bindings/Java/apitest index e41ba3eb..977788a5 100755 --- a/Bindings/Java/apitest +++ b/Bindings/Java/apitest @@ -1,8 +1,8 @@ -#!/bin/bash -p +#!/bin/sh ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by +# Copyright (C) 2006-2018 by # Samuel Thibault # Sébastien Hinderer # @@ -18,10 +18,6 @@ # This software is maintained by Dave Mielke . ############################################################################### -currentDirectory="$(pwd)" - -export LD_LIBRARY_PATH="${currentDirectory}" -export LD_PRELOAD="${currentDirectory}/../../Programs/libbrlapi.so" - -exec java -classpath "${currentDirectory}/classes" org.a11y.BrlAPI.Test "${@}" +. "${0%/*}/../../apitest.sh" +exec java -classpath "${programDirectory}/classes" org.a11y.BrlAPI.Test "${@}" exit "${?}" diff --git a/Bindings/Java/bindings.c b/Bindings/Java/bindings.c index c24d6ff2..5311f064 100644 --- a/Bindings/Java/bindings.c +++ b/Bindings/Java/bindings.c @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by + * Copyright (C) 2006-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -251,6 +251,21 @@ JNIEXPORT jstring JNICALL Java_org_a11y_BrlAPI_Native_getDriverName(JNIEnv *jenv return (*jenv)->NewStringUTF(jenv, name); } +JNIEXPORT jstring JNICALL Java_org_a11y_BrlAPI_Native_getModelIdentifier(JNIEnv *jenv, jobject jobj) { + char identifier[32]; + GET_HANDLE(jenv, jobj, NULL); + + env = jenv; + + if (brlapi__getModelIdentifier(handle, identifier, sizeof(identifier)) < 0) { + ThrowError(jenv, __func__); + return NULL; + } + + identifier[sizeof(identifier)-1] = 0; + return (*jenv)->NewStringUTF(jenv, identifier); +} + JNIEXPORT jobject JNICALL Java_org_a11y_BrlAPI_Native_getDisplaySize(JNIEnv *jenv, jobject jobj) { unsigned int x, y; jclass jcsize; diff --git a/Bindings/Java/bindings.m4 b/Bindings/Java/bindings.m4 index eac8c686..71b499f0 100644 --- a/Bindings/Java/bindings.m4 +++ b/Bindings/Java/bindings.m4 @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by +# Copyright (C) 2006-2018 by # Samuel Thibault # Sébastien Hinderer # diff --git a/Bindings/Java/constants.awk b/Bindings/Java/constants.awk index c558a6b8..cecaffcf 100644 --- a/Bindings/Java/constants.awk +++ b/Bindings/Java/constants.awk @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by +# Copyright (C) 2006-2018 by # Samuel Thibault # Sébastien Hinderer # diff --git a/Bindings/Lisp/Makefile.in b/Bindings/Lisp/Makefile.in index 6788f8f6..55327b53 100644 --- a/Bindings/Lisp/Makefile.in +++ b/Bindings/Lisp/Makefile.in @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Mario Lang +# Copyright (C) 2006-2018 by Mario Lang # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # diff --git a/Bindings/Lisp/apisetup.lisp b/Bindings/Lisp/apisetup.lisp new file mode 100644 index 00000000..5b1074b8 --- /dev/null +++ b/Bindings/Lisp/apisetup.lisp @@ -0,0 +1,28 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; libbrlapi - A library providing access to braille terminals for applications. +; +; Copyright (C) 2006-2018 by Mario Lang +; +; libbrlapi comes with ABSOLUTELY NO WARRANTY. +; +; This is free software, placed under the terms of the +; GNU Lesser General Public License, as published by the Free Software +; Foundation; either version 2.1 of the License, or (at your option) any +; later version. Please see the file LICENSE-LGPL for details. +; +; Web Page: http://brltty.com/ +; +; This software is maintained by Dave Mielke . +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require 'asdf) +(require 'sb-posix) + +(defun current-directory () + "The current working directory as a directory path." + (concatenate 'string (sb-posix:getcwd) "/") +) + +(pushnew (current-directory) asdf:*central-registry* :test #'equal) +(asdf:operate 'asdf:load-op 'brlapi) + diff --git a/Bindings/Lisp/apitest b/Bindings/Lisp/apitest new file mode 100755 index 00000000..34505028 --- /dev/null +++ b/Bindings/Lisp/apitest @@ -0,0 +1,21 @@ +#!/bin/sh +############################################################################### +# libbrlapi - A library providing access to braille terminals for applications. +# +# Copyright (C) 2006-2018 by Dave Mielke +# +# libbrlapi comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +. "${0%/*}/../../apitest.sh" +exec sbcl --script "${programDirectory}/apitest.lisp" "${@}" +exit "${?}" diff --git a/Bindings/Lisp/apitest.lisp b/Bindings/Lisp/apitest.lisp new file mode 100644 index 00000000..643f506f --- /dev/null +++ b/Bindings/Lisp/apitest.lisp @@ -0,0 +1,75 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; libbrlapi - A library providing access to braille terminals for applications. +; +; Copyright (C) 2006-2018 by Mario Lang +; +; libbrlapi comes with ABSOLUTELY NO WARRANTY. +; +; This is free software, placed under the terms of the +; GNU Lesser General Public License, as published by the Free Software +; Foundation; either version 2.1 of the License, or (at your option) any +; later version. Please see the file LICENSE-LGPL for details. +; +; Web Page: http://brltty.com/ +; +; This software is maintained by Dave Mielke . +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(load "apisetup.lisp") + +(defun brlapi-test-tty (output session tty) + "Perform a test of BrlAPI's input functions." + + (brlapi:enter-tty-mode session tty) + (brlapi:write-text session "Press any key to continue...") + (apply #'format output "Key: type=~A command=~A argument=~D flags=~{~A~^,~}~%" + (brlapi:expand-key-code (brlapi:read-key session t))) + (brlapi:leave-tty-mode session) +) + +(defun brlapi-test (&key auth host tty) + "Perform a test of various BrlAPI functiins." + + (let ( + (output *standard-output*) + (session (brlapi:open-connection :auth auth :host host)) + ) + + (if (brlapi:is-connected session) + (progn + (format output "Session: ") + (brlapi:print-properties session output) + (format output "~%") + + (if tty (brlapi-test-tty output session (parse-integer tty))) + ) + (format output "connection failure~%") + ) + + (brlapi:close-connection session) + ) +) + +(defun program-arguments () + "The command-line arguments." + + sb-ext:*posix-argv* +) + +(defun string->keyword (string) + "Convert a string to a keyword." + + (values (intern string "KEYWORD")) +) + +(defun arguments->keyword-options (arguments) + "Convert a list of argument strings into a list of keyword options." + + (loop + for (option value) on arguments by #'cddr + append (list (string->keyword (string-upcase option)) value) + ) +) + +(apply #'brlapi-test (arguments->keyword-options (cdr (program-arguments)))) +(exit) diff --git a/Bindings/Lisp/bindings.m4 b/Bindings/Lisp/bindings.m4 index cbaf4cdb..96fc1776 100644 --- a/Bindings/Lisp/bindings.m4 +++ b/Bindings/Lisp/bindings.m4 @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # diff --git a/Bindings/Lisp/brlapi.asd b/Bindings/Lisp/brlapi.asd index 98600c66..c958d20d 100644 --- a/Bindings/Lisp/brlapi.asd +++ b/Bindings/Lisp/brlapi.asd @@ -1,7 +1,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; libbrlapi - A library providing access to braille terminals for applications. ; -; Copyright (C) 2006-2017 by Mario Lang +; Copyright (C) 2006-2018 by Mario Lang ; ; libbrlapi comes with ABSOLUTELY NO WARRANTY. ; diff --git a/Bindings/Lisp/brlapi.lisp.in b/Bindings/Lisp/brlapi.lisp.in index 2915933e..231bc1f2 100644 --- a/Bindings/Lisp/brlapi.lisp.in +++ b/Bindings/Lisp/brlapi.lisp.in @@ -2,7 +2,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; libbrlapi - A library providing access to braille terminals for applications. ; -; Copyright (C) 2006-2017 by Mario Lang +; Copyright (C) 2006-2018 by Mario Lang ; ; libbrlapi comes with ABSOLUTELY NO WARRANTY. ; @@ -23,11 +23,12 @@ (defpackage :brlapi (:use :common-lisp :cffi) - (:export #:open-connection #:close-connection - #:driver-name #:display-size + (:export #:open-connection #:close-connection #:is-connected + #:print-properties #:print-object + #:driver-name #:model-identifier #:display-size #:enter-tty-mode #:leave-tty-mode #:write-text #:write-dots #:write-region - #:read-key #:expand-key)) + #:read-key #:expand-key-code)) (in-package :brlapi) @@ -41,20 +42,45 @@ ;;;; * The DISPLAY class (defclass display () - ((handle :initarg :handle :reader display-handle) - (fd :initarg :fd :reader display-file-descriptor) - (auth :initarg :auth :reader display-auth) - (host :initarg :host :reader display-host) - (tty :initform nil :reader display-tty))) + ((handle :initarg :handle :reader connection-handle) + (fd :initarg :fd :reader file-descriptor) + (auth :initarg :auth :reader server-auth) + (host :initarg :host :reader server-host) + (tty :initform nil :reader entered-tty))) + +(defmethod is-connected ((obj display)) + (and + obj + (let + ((fd (file-descriptor obj))) + (and fd (numberp fd) (not (< fd 0))) + ) + ) +) + +(defmethod print-properties ((obj display) stream) + (multiple-value-bind (width height) (display-size obj) + (format stream + "fd=~D auth=~A host=~A driver=~A model=~A width=~D height=~D" + (file-descriptor obj) + (server-auth obj) + (server-host obj) + (driver-name obj) + (model-identifier obj) + width + height + ) + ) +) (defmethod print-object ((obj display) stream) (print-unreadable-object (obj stream :type t) - (if (not (display-file-descriptor obj)) - (format stream "disconnected") - (apply #'format stream "~Dx~D fd=~D, host=~A, driver=~A" - (concatenate 'list (multiple-value-list (display-size obj)) - (list (display-file-descriptor obj) (display-host obj) - (driver-name obj))))))) + (if (is-connected obj) + (print-properties obj stream) + (format stream "disconnected") + ) + ) +) ;;;; * Error handling @@ -87,7 +113,7 @@ (auth :string) (host :string)) -(defun open-connection (&optional auth host) +(defun open-connection (&key auth host) "Open a new connection to BRLTTY on HOST usng AUTH for authorization. Return a DISPLAY object which can further be used to interact with BRLTTY." (with-foreign-object (settings 'settings) @@ -110,9 +136,9 @@ Return a DISPLAY object which can further be used to interact with BRLTTY." display))) (defmethod close-connection ((obj display)) - (foreign-funcall "brlapi__closeConnection" :pointer (display-handle obj) :void) + (foreign-funcall "brlapi__closeConnection" :pointer (connection-handle obj) :void) (setf (slot-value obj 'fd) nil) - (foreign-free (display-handle obj)) + (foreign-free (connection-handle obj)) (setf (slot-value obj 'handle) nil)) ;;;; * Querying the display @@ -120,26 +146,31 @@ Return a DISPLAY object which can further be used to interact with BRLTTY." (defmethod driver-name ((obj display)) "Return the currently used driver name." (with-foreign-pointer-as-string ((str str-size) 64) - (foreign-funcall "brlapi__getDriverName" :pointer (display-handle obj) + (foreign-funcall "brlapi__getDriverName" :pointer (connection-handle obj) + :string str :int str-size brlapi-code))) + +(defmethod model-identifier ((obj display)) + "Return the currently used display model." + (with-foreign-pointer-as-string ((str str-size) 64) + (foreign-funcall "brlapi__getModelIdentifier" :pointer (connection-handle obj) :string str :int str-size brlapi-code))) (defmethod display-size ((obj display)) "Return the dimensions of DISPLAY as multiple values. The first value represents the x dimension and the second the y dimension." (with-foreign-objects ((x :int) (y :int)) - (foreign-funcall "brlapi__getDisplaySize" :pointer (display-handle obj) :pointer x :pointer y brlapi-code) + (foreign-funcall "brlapi__getDisplaySize" :pointer (connection-handle obj) :pointer x :pointer y brlapi-code) (values (mem-ref x :int) (mem-ref y :int)))) - ;;;; * TTY mode (defmethod enter-tty-mode ((obj display) tty &optional (driver "")) (declare (integer tty)) (declare (string driver)) - (setf (slot-value obj 'tty) (foreign-funcall "brlapi__enterTtyMode" :pointer (display-handle obj) :int tty :string driver brlapi-code))) + (setf (slot-value obj 'tty) (foreign-funcall "brlapi__enterTtyMode" :pointer (connection-handle obj) :int tty :string driver brlapi-code))) (defmethod leave-tty-mode ((obj display)) - (foreign-funcall "brlapi__leaveTtyMode" :pointer (display-handle obj) brlapi-code) + (foreign-funcall "brlapi__leaveTtyMode" :pointer (connection-handle obj) brlapi-code) (setf (slot-value obj 'tty) nil)) @@ -150,7 +181,7 @@ The first value represents the x dimension and the second the y dimension." (declare (string text)) (declare (integer cursor)) (if (eql (foreign-funcall "brlapi__writeText" - :pointer (display-handle obj) + :pointer (connection-handle obj) :int cursor :string text brlapi-code) 0) @@ -166,7 +197,7 @@ The first value represents the x dimension and the second the y dimension." (foreign-bitfield-value 'dots (nth i dots-list)))) (loop for i from (length dots-list) below (display-size obj) do (setf (mem-aref dots 'dots i) 0)) - (foreign-funcall "brlapi__writeDots" :pointer (display-handle obj) :pointer dots brlapi-code))) + (foreign-funcall "brlapi__writeDots" :pointer (connection-handle obj) :pointer dots brlapi-code))) (defcstruct write-struct (display-number :int) @@ -208,7 +239,7 @@ The first value represents the x dimension and the second the y dimension." (foreign-slot-value ws 'write-struct 'text) txt (foreign-slot-value ws 'write-struct 'attr-or) attro (foreign-slot-value ws 'write-struct 'attr-and) attra) - (eql (foreign-funcall "brlapi__write" :pointer (display-handle obj) :pointer ws brlapi-code) 0)))) + (eql (foreign-funcall "brlapi__write" :pointer (connection-handle obj) :pointer ws brlapi-code) 0)))) ;;;; * Input @@ -216,22 +247,51 @@ The first value represents the x dimension and the second the y dimension." (defctype key-code :uint64) (defmethod read-key ((obj display) &optional block) (with-foreign-object (key 'key-code) - (case (foreign-funcall "brlapi__readKey" :pointer (display-handle obj) :boolean block :pointer key brlapi-code) + (case (foreign-funcall "brlapi__readKey" :pointer (connection-handle obj) :boolean block :pointer key brlapi-code) (0 nil) (1 (mem-ref key 'key-code))))) -(defun expand-key (code) - (with-foreign-objects ((command :int) (arg :int) (flags :int)) - (foreign-funcall "brlapi_expandKeyCode" - key-code code - :pointer command :pointer arg :pointer flags - :int) - (values (intern (foreign-funcall "brlapi_getKeyName" - :int (mem-ref command :int) - :int (mem-ref arg :int) - :string)) - (mem-ref arg :int) - (mem-ref flags :int)))) +(defcstruct expanded-key-code + "A key code broken down into its individual fields." + (type :int) + (command :int) + (argument :int) + (flags :int) +) + +(defcstruct key-code-description + "The description of a key code." + (type-name :string) + (command-name :string) + (argument-value :int) + (flag-count :int) + (flag-names :string :count 32) + (field-values expanded-key-code) +) + +(defun expand-key-code (code) + "Return the individual fields of the key code as a list. +The list contains: + 0: type (a string) + 1: command (a string) + 2: argument (a non-negative integer) + 3: flags (a list of strings)" + + (with-foreign-object (description 'key-code-description) + (setf result (foreign-funcall "brlapi_describeKeyCode" + key-code code :pointer description :int)) + (with-foreign-slots + ((type-name command-name argument-value flag-count flag-names) description key-code-description) + + (list + type-name command-name argument-value + (loop + for index below flag-count + collect (mem-aref (foreign-slot-pointer description 'key-code-description 'flag-names) :string index)) + ) + ) + ) +) ;;;; * Example usage diff --git a/Bindings/OCaml/Makefile.in b/Bindings/OCaml/Makefile.in index 38d8f71d..47f72011 100644 --- a/Bindings/OCaml/Makefile.in +++ b/Bindings/OCaml/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Bindings/OCaml/brlapi_stubs.c b/Bindings/OCaml/brlapi_stubs.c index f0a4874c..c7e6a4af 100644 --- a/Bindings/OCaml/brlapi_stubs.c +++ b/Bindings/OCaml/brlapi_stubs.c @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2005-2017 by + * Copyright (C) 2005-2018 by * Sébastien Hinderer * Samuel Thibault * All rights reserved. diff --git a/Bindings/OCaml/constants.awk b/Bindings/OCaml/constants.awk index 0a41ba6c..949db312 100644 --- a/Bindings/OCaml/constants.awk +++ b/Bindings/OCaml/constants.awk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Bindings/OCaml/main.ml b/Bindings/OCaml/main.ml index 66ed4eae..275f4ac4 100644 --- a/Bindings/OCaml/main.ml +++ b/Bindings/OCaml/main.ml @@ -1,7 +1,7 @@ (* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2002-2017 by + * Copyright (C) 2002-2018 by * Sébastien Hinderer * Samuel Thibault * All rights reserved. diff --git a/Bindings/OCaml/main.mli b/Bindings/OCaml/main.mli index 6dbb87f8..c345455b 100644 --- a/Bindings/OCaml/main.mli +++ b/Bindings/OCaml/main.mli @@ -1,7 +1,7 @@ (* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2002-2017 by + * Copyright (C) 2002-2018 by * Sébastien Hinderer * Samuel Thibault * All rights reserved. diff --git a/Bindings/Python/Makefile.in b/Bindings/Python/Makefile.in index 3bdebb33..b09d884f 100644 --- a/Bindings/Python/Makefile.in +++ b/Bindings/Python/Makefile.in @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # diff --git a/Bindings/Python/apitest b/Bindings/Python/apitest new file mode 100755 index 00000000..3b6b5974 --- /dev/null +++ b/Bindings/Python/apitest @@ -0,0 +1,21 @@ +#!/bin/bash +############################################################################### +# libbrlapi - A library providing access to braille terminals for applications. +# +# Copyright (C) 2006-2018 by Dave Mielke +# +# libbrlapi comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +. "${0%/*}/../../apitest.sh" +exec python "${programDirectory}/${programName}.py" "${@}" +exit "${?}" diff --git a/Bindings/Python/apitest.py b/Bindings/Python/apitest.py index 39bf50b2..1b94ef66 100755 --- a/Bindings/Python/apitest.py +++ b/Bindings/Python/apitest.py @@ -1,16 +1,15 @@ -#!/usr/bin/env python ############################################################################### # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -96,6 +95,7 @@ if __name__ == "__main__": try: writeProperty("Driver", brl.driverName) + writeProperty("Model", brl.modelIdentifier) writeProperty("Columns", str(brl.displaySize[0])) writeProperty("Rows", str(brl.displaySize[1])) diff --git a/Bindings/Python/bindings.c b/Bindings/Python/bindings.c index 8da05582..9e28d647 100644 --- a/Bindings/Python/bindings.c +++ b/Bindings/Python/bindings.c @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2005-2017 by + * Copyright (C) 2005-2018 by * Alexis Robert * Samuel Thibault * diff --git a/Bindings/Python/bindings.h b/Bindings/Python/bindings.h index a5a2f996..cb02b7dd 100644 --- a/Bindings/Python/bindings.h +++ b/Bindings/Python/bindings.h @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2005-2017 by + * Copyright (C) 2005-2018 by * Alexis Robert * Samuel Thibault * diff --git a/Bindings/Python/bindings.m4 b/Bindings/Python/bindings.m4 index 58f02163..34db8bfe 100644 --- a/Bindings/Python/bindings.m4 +++ b/Bindings/Python/bindings.m4 @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # @@ -20,6 +20,16 @@ AC_DEFUN([BRLTTY_PYTHON_BINDINGS], [dnl PYTHON_OK=true +# Suppress a new warning introduced in Python 3.6: +# +# Python runtime initialized with LC_CTYPE=C +# (a locale with default ASCII encoding), +# which may cause Unicode compatibility problems. +# Using C.UTF-8, C.utf8, or UTF-8 (if available) +# as alternative Unicode-compatible locales is recommended. +# +export PYTHONCOERCECLOCALE=0 + AC_PATH_PROG([PYTHON], [python]) if test -z "${PYTHON}" then diff --git a/Bindings/Python/brlapi.pyx b/Bindings/Python/brlapi.pyx index 7c67b387..598fd10b 100644 --- a/Bindings/Python/brlapi.pyx +++ b/Bindings/Python/brlapi.pyx @@ -58,7 +58,7 @@ except brlapi.ConnectionError as e: ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # @@ -350,6 +350,19 @@ cdef class Connection: else: return name + property modelIdentifier: + """Get the identifier for the model of the braille display + See brlapi_getModelIdentifier(3).""" + def __get__(self): + cdef char identifier[21] + cdef int retval + with nogil: + retval = c_brlapi.brlapi__getModelIdentifier(self.h, identifier, sizeof(identifier)) + if retval == -1: + raise OperationError() + else: + return identifier + def enterTtyMode(self, tty = TTY_DEFAULT, driver = None): """Ask for some tty, with some key mechanism diff --git a/Bindings/Python/c_brlapi.pxd b/Bindings/Python/c_brlapi.pxd index 3786ea07..e337efce 100644 --- a/Bindings/Python/c_brlapi.pxd +++ b/Bindings/Python/c_brlapi.pxd @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # @@ -62,6 +62,7 @@ cdef extern from "Programs/brlapi.h": int brlapi__getDisplaySize(brlapi_handle_t *, unsigned int*, unsigned int *y) nogil int brlapi__getDriverName(brlapi_handle_t *, char*, int) nogil + int brlapi__getModelIdentifier(brlapi_handle_t *, char*, int) nogil int brlapi__enterTtyMode(brlapi_handle_t *, int, char*) nogil int brlapi__enterTtyModeWithPath(brlapi_handle_t *, int *, int, char*) nogil diff --git a/Bindings/Python/constants.awk b/Bindings/Python/constants.awk index bea0f3bc..dad00b9f 100644 --- a/Bindings/Python/constants.awk +++ b/Bindings/Python/constants.awk @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # diff --git a/Bindings/Python/mkdoc.py b/Bindings/Python/mkdoc.py index e7278f1e..3c1bb40d 100644 --- a/Bindings/Python/mkdoc.py +++ b/Bindings/Python/mkdoc.py @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # diff --git a/Bindings/Python/setup.py.in b/Bindings/Python/setup.py.in index 111818f6..639be290 100644 --- a/Bindings/Python/setup.py.in +++ b/Bindings/Python/setup.py.in @@ -2,7 +2,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # diff --git a/Bindings/Tcl/Makefile.in b/Bindings/Tcl/Makefile.in index 185dd07d..683e74e6 100644 --- a/Bindings/Tcl/Makefile.in +++ b/Bindings/Tcl/Makefile.in @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # diff --git a/Bindings/Tcl/apitest b/Bindings/Tcl/apitest index 0d054204..e3760da7 100755 --- a/Bindings/Tcl/apitest +++ b/Bindings/Tcl/apitest @@ -1,8 +1,8 @@ -#!/bin/bash -p +#!/bin/bash ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # @@ -16,12 +16,6 @@ # This software is maintained by Dave Mielke . ############################################################################### -programName="$(basename "${0}")" -programDirectory="$(cd "$(dirname "${0}")" && pwd)" -currentDirectory="$(pwd)" - -export LD_LIBRARY_PATH="${currentDirectory}" -export LD_PRELOAD="${currentDirectory}/../../Programs/libbrlapi.so" - +. "${0%/*}/../../apitest.sh" exec tclsh "${programDirectory}/${programName}.tcl" "${@}" exit "${?}" diff --git a/Bindings/Tcl/apitest.tcl b/Bindings/Tcl/apitest.tcl index 6e53967b..b12941a1 100755 --- a/Bindings/Tcl/apitest.tcl +++ b/Bindings/Tcl/apitest.tcl @@ -2,7 +2,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # @@ -52,6 +52,9 @@ puts "FileDescriptor: $fileDescriptor" set driverName [$session getDriverName] puts "DriverName: $driverName" +set modelIdentifier [$session getModelIdentifier] +puts "ModelIdentifier: $modelIdentifier" + set displaySize [$session getDisplaySize] puts "DisplaySize: [expandList $displaySize width height]" diff --git a/Bindings/Tcl/bindings.c b/Bindings/Tcl/bindings.c index 2edcc1c8..f0912001 100644 --- a/Bindings/Tcl/bindings.c +++ b/Bindings/Tcl/bindings.c @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2006-2017 by Dave Mielke + * Copyright (C) 2006-2018 by Dave Mielke * * libbrlapi comes with ABSOLUTELY NO WARRANTY. * @@ -365,6 +365,7 @@ brlapiSessionCommand (ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj *co "getDriverName", "getFileDescriptor", "getHost", + "getModelIdentifier", "ignoreKeyRanges", "ignoreKeys", "leaveRawMode", @@ -392,6 +393,7 @@ brlapiSessionCommand (ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj *co FCN_getDriverName, FCN_getFileDescriptor, FCN_getHost, + FCN_getModelIdentifier, FCN_ignoreKeyRanges, FCN_ignoreKeys, FCN_leaveRawMode, @@ -476,6 +478,32 @@ brlapiSessionCommand (ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj *co } } + case FCN_getModelIdentifier: { + size_t size = 0X10; + + if (objc != 2) { + Tcl_WrongNumArgs(interp, 2, objv, NULL); + return TCL_ERROR; + } + + while (1) { + char buffer[size]; + int result = brlapi__getModelIdentifier(session->handle, buffer, size); + + if (result == -1) { + setBrlapiError(interp); + return TCL_ERROR; + } + + if (result <= size) { + setStringResult(interp, buffer, result-1); + return TCL_OK; + } + + size = result; + } + } + case FCN_getDisplaySize: { unsigned int width, height; diff --git a/Bindings/Tcl/bindings.m4 b/Bindings/Tcl/bindings.m4 index 4a7a2cac..941c1d51 100644 --- a/Bindings/Tcl/bindings.m4 +++ b/Bindings/Tcl/bindings.m4 @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # diff --git a/Bindings/Tcl/prologue.tcl b/Bindings/Tcl/prologue.tcl index aee7c8c9..9c580b7c 100644 --- a/Bindings/Tcl/prologue.tcl +++ b/Bindings/Tcl/prologue.tcl @@ -1,7 +1,7 @@ ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # diff --git a/Bootdisks/bp2cf b/Bootdisks/bp2cf index 796e1f78..29ffaf80 100755 --- a/Bootdisks/bp2cf +++ b/Bootdisks/bp2cf @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Bootdisks/rhmkiso b/Bootdisks/rhmkiso index 450c5ebd..002df01e 100755 --- a/Bootdisks/rhmkiso +++ b/Bootdisks/rhmkiso @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/DOS/mkdosarc b/DOS/mkdosarc index b63773f8..cb305955 100755 --- a/DOS/mkdosarc +++ b/DOS/mkdosarc @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/DOS/mkdostools b/DOS/mkdostools index bc1c123c..701d8b4a 100755 --- a/DOS/mkdostools +++ b/DOS/mkdostools @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Documents/BrlAPIref.doxy.in b/Documents/BrlAPIref.doxy.in index 906d456d..6100145b 100644 --- a/Documents/BrlAPIref.doxy.in +++ b/Documents/BrlAPIref.doxy.in @@ -820,18 +820,6 @@ GENERATE_XML = NO XML_OUTPUT = xml -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that diff --git a/Documents/BrlAPIref/html/brlapi_8h.html b/Documents/BrlAPIref/html/brlapi_8h.html index d5e263b5..8c115864 100644 --- a/Documents/BrlAPIref/html/brlapi_8h.html +++ b/Documents/BrlAPIref/html/brlapi_8h.html @@ -90,13 +90,13 @@ Data Structures - + - + @@ -110,7 +110,11 @@ Macros - + + + + + @@ -293,6 +297,10 @@ Functions + + + + @@ -349,14 +357,14 @@ Functions - - - - - - - - + + + + + + + + diff --git a/Documents/BrlAPIref/html/brlapi_8h_source.html b/Documents/BrlAPIref/html/brlapi_8h_source.html index 9a93b9fc..509608f3 100644 --- a/Documents/BrlAPIref/html/brlapi_8h_source.html +++ b/Documents/BrlAPIref/html/brlapi_8h_source.html @@ -55,7 +55,7 @@
2 /*
3  * libbrlapi - A library providing access to braille terminals for applications.
4  *
-
5  * Copyright (C) 2002-2017 by
+
5  * Copyright (C) 2002-2018 by
6  * Samuel Thibault <Samuel.Thibault@ens-lyon.org>
7  * Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org>
8  *
@@ -80,13 +80,13 @@
31 
32 /* #undef BRLAPI_WIN32 */
33 
-
38 #define BRLAPI_RELEASE "0.6.6"
+
38 #define BRLAPI_RELEASE "0.6.7"
39 
41 #define BRLAPI_MAJOR 0
42 
44 #define BRLAPI_MINOR 6
45 
-
47 #define BRLAPI_REVISION 6
+
47 #define BRLAPI_REVISION 7
48 
51 /* Types are defined there */
52 #include <sys/types.h>
@@ -121,7 +121,7 @@
103 
106 
-
120 #define BRLAPI_SOCKETPORTNUM 4101
+
120 #define BRLAPI_SOCKETPORTNUM 4101
121 #define BRLAPI_SOCKETPORT "4101"
122 
124 #define BRLAPI_SOCKETPATH "/var/lib/BrlAPI"
@@ -133,440 +133,454 @@
138 #ifdef BRLAPI_WIN32
139 /* No authentication by default on Windows */
140 #define BRLAPI_DEFAUTH "none"
-
141 #else
-
142 #define BRLAPI_DEFAUTH "polkit+keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE
-
143 #endif /* BRLAPI_WIN32 */
-
144 
-
145 #ifdef __MINGW32__
-
146 typedef HANDLE brlapi_fileDescriptor;
-
147 #else /* __MINGW32__ */
- -
149 #endif /* __MINGW32__ */
-
150 
-
181 typedef struct {
-
189  char *auth;
-
190 
-
199  char *host;
- -
201 
-
202 /* BRLAPI_SETTINGS_INITIALIZER */
-
205 #define BRLAPI_SETTINGS_INITIALIZER { NULL, NULL }
-
206 
-
207 /* brlapi_openConnection */
-
252 #ifndef BRLAPI_NO_SINGLE_SESSION
-
253 brlapi_fileDescriptor BRLAPI_STDCALL brlapi_openConnection(const brlapi_connectionSettings_t *desiredSettings, brlapi_connectionSettings_t *actualSettings);
-
254 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
255 brlapi_fileDescriptor BRLAPI_STDCALL brlapi__openConnection(brlapi_handle_t *handle, const brlapi_connectionSettings_t *desiredSettings, brlapi_connectionSettings_t *actualSettings);
-
256 
-
257 /* brlapi_closeConnection */
-
264 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
266 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
268 
-
284 #define BRLAPI_MAXNAMELENGTH 31
-
285 
-
286 /* brlapi_getDriverName */
-
298 #ifndef BRLAPI_NO_SINGLE_SESSION
-
299 int BRLAPI_STDCALL brlapi_getDriverName(char *buffer, size_t size);
-
300 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
301 int BRLAPI_STDCALL brlapi__getDriverName(brlapi_handle_t *handle, char *buffer, size_t size);
-
302 
-
303 /* brlapi_getDisplaySize */
-
305 #ifndef BRLAPI_NO_SINGLE_SESSION
-
306 int BRLAPI_STDCALL brlapi_getDisplaySize(unsigned int *x, unsigned int *y);
-
307 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
308 int BRLAPI_STDCALL brlapi__getDisplaySize(brlapi_handle_t *handle, unsigned int *x, unsigned int *y);
-
309 
-
333 /* brlapi_enterTtyMode */
-
353 #ifndef BRLAPI_NO_SINGLE_SESSION
-
354 int BRLAPI_STDCALL brlapi_enterTtyMode(int tty, const char *driver);
-
355 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
356 int BRLAPI_STDCALL brlapi__enterTtyMode(brlapi_handle_t *handle, int tty, const char *driver);
-
357 
-
367 #define BRLAPI_TTY_DEFAULT -1
-
368 
-
369 /* brlapi_enterTtyModeWithPath */
-
381 #ifndef BRLAPI_NO_SINGLE_SESSION
-
382 int BRLAPI_STDCALL brlapi_enterTtyModeWithPath(int *ttys, int count, const char *driver);
-
383 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
384 int BRLAPI_STDCALL brlapi__enterTtyModeWithPath(brlapi_handle_t *handle, int *ttys, int count, const char *driver);
-
385 
-
386 /* brlapi_leaveTtyMode */
-
393 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
395 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
397 
-
398 /* brlapi_setFocus */
-
409 #ifndef BRLAPI_NO_SINGLE_SESSION
-
410 int BRLAPI_STDCALL brlapi_setFocus(int tty);
-
411 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
412 int BRLAPI_STDCALL brlapi__setFocus(brlapi_handle_t *handle, int tty);
-
413 
-
443 /* brlapi_writeText */
-
458 #ifndef BRLAPI_NO_SINGLE_SESSION
-
459 int BRLAPI_STDCALL brlapi_writeText(int cursor, const char *text);
-
460 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
461 int BRLAPI_STDCALL brlapi__writeText(brlapi_handle_t *handle, int cursor, const char *text);
-
462 
-
463 /* brlapi_writeWText */
-
476 #ifndef BRLAPI_NO_SINGLE_SESSION
-
477 int BRLAPI_STDCALL brlapi_writeWText(int cursor, const wchar_t *text);
-
478 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
479 int BRLAPI_STDCALL brlapi__writeWText(brlapi_handle_t *handle, int cursor, const wchar_t *text);
-
480 
-
481 /* brlapi_writeDots */
-
489 #ifndef BRLAPI_NO_SINGLE_SESSION
-
490 int BRLAPI_STDCALL brlapi_writeDots(const unsigned char *dots);
-
491 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
492 int BRLAPI_STDCALL brlapi__writeDots(brlapi_handle_t *handle, const unsigned char *dots);
-
493 
-
494 /* brlapi_writeArguments_t */
-
496 typedef struct {
-
497  int displayNumber ;
-
498  unsigned int regionBegin ;
-
499  unsigned int regionSize ;
-
500  char *text ;
-
501  int textSize ;
-
502  unsigned char *andMask ;
-
503  unsigned char *orMask ;
-
504  int cursor ;
-
505  char *charset ;
- -
507 
-
512 #define BRLAPI_DISPLAY_DEFAULT -1
-
513 
-
518 #define BRLAPI_CURSOR_LEAVE -1
-
519 
-
524 #define BRLAPI_CURSOR_OFF 0
-
525 
-
526 /* BRLAPI_WRITEARGUMENTS_INITIALIZER */
-
536 #define BRLAPI_WRITEARGUMENTS_INITIALIZER { \
-
537  .displayNumber = BRLAPI_DISPLAY_DEFAULT, \
-
538  .regionBegin = 0, \
-
539  .regionSize = 0, \
-
540  .text = NULL, \
-
541  .textSize = -1, \
-
542  .andMask = NULL, \
-
543  .orMask = NULL, \
-
544  .cursor = BRLAPI_CURSOR_LEAVE, \
-
545  .charset = NULL \
-
546 }
-
547 
-
548 /* brlapi_write */
-
584 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
586 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
588 
-
591 #include "brlapi_keycodes.h"
-
592 
-
606 /* brlapi_expandedKeyCode_t */
-
608 typedef struct {
-
609  unsigned int type ;
-
610  unsigned int command ;
-
611  unsigned int argument ;
-
612  unsigned int flags ;
- -
614 
-
615 /* brlapi_expandKeyCode */
- -
624 
-
625 /* brlapi_describedKeyCode_t */
-
627 typedef struct {
-
628  const char *type ;
-
629  const char *command ;
-
630  unsigned int argument ;
-
631  unsigned int flags ;
-
632  const char *flag[64 - BRLAPI_KEY_FLAGS_SHIFT] ;
- - -
635 
-
636 /* brlapi_describeKeyCode */
- -
645 
-
647 #define BRLAPI_UC_ROW 0x2800UL
-
648 
-
649 /* brlapi_readKey */
-
716 #ifndef BRLAPI_NO_SINGLE_SESSION
-
717 int BRLAPI_STDCALL brlapi_readKey(int wait, brlapi_keyCode_t *code);
-
718 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
719 int BRLAPI_STDCALL brlapi__readKey(brlapi_handle_t *handle, int wait, brlapi_keyCode_t *code);
-
720 
-
722 typedef enum {
- - - - - - -
729 
-
730 /* brlapi_ignoreKeys */
-
743 #ifndef BRLAPI_NO_SINGLE_SESSION
-
744 int BRLAPI_STDCALL brlapi_ignoreKeys(brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
-
745 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
746 int BRLAPI_STDCALL brlapi__ignoreKeys(brlapi_handle_t *handle, brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
-
747 
-
748 /* brlapi_acceptKeys */
-
761 #ifndef BRLAPI_NO_SINGLE_SESSION
-
762 int BRLAPI_STDCALL brlapi_acceptKeys(brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
-
763 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
764 int BRLAPI_STDCALL brlapi__acceptKeys(brlapi_handle_t *handle, brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
-
765 
-
766 /* brlapi_ignoreAllKeys */
-
772 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
774 #define brlapi_ignoreAllKeys() brlapi_ignoreKeys(brlapi_rangeType_all, NULL, 0)
-
775 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
777 #define brlapi__ignoreAllKeys(handle) brlapi__ignoreKeys(handle, brlapi_rangeType_all, NULL, 0)
-
778 
-
779 /* brlapi_acceptAllKeys */
-
788 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
790 #define brlapi_acceptAllKeys() brlapi_acceptKeys(brlapi_rangeType_all, NULL, 0)
-
791 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
793 #define brlapi__acceptAllKeys(handle) brlapi__acceptKeys(handle, brlapi_rangeType_all, NULL, 0)
-
794 
-
799 typedef struct {
- - - -
803 
-
804 /* brlapi_ignoreKeyRanges */
-
815 #ifndef BRLAPI_NO_SINGLE_SESSION
-
816 int BRLAPI_STDCALL brlapi_ignoreKeyRanges(brlapi_range_t ranges[], unsigned int count);
-
817 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
818 int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count);
-
819 
-
820 /* brlapi_acceptKeyRanges */
-
831 #ifndef BRLAPI_NO_SINGLE_SESSION
-
832 int BRLAPI_STDCALL brlapi_acceptKeyRanges(brlapi_range_t ranges[], unsigned int count);
-
833 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
834 int BRLAPI_STDCALL brlapi__acceptKeyRanges(brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count);
-
860 /* brlapi_enterRawMode */
-
865 #ifndef BRLAPI_NO_SINGLE_SESSION
-
866 int BRLAPI_STDCALL brlapi_enterRawMode(const char *driver);
-
867 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
868 int BRLAPI_STDCALL brlapi__enterRawMode(brlapi_handle_t *handle, const char *driver);
-
869 
-
870 /* brlapi_leaveRawMode */
-
873 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
875 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
877 
-
878 /* brlapi_sendRaw */
-
884 #ifndef BRLAPI_NO_SINGLE_SESSION
-
885 ssize_t BRLAPI_STDCALL brlapi_sendRaw(const void *buffer, size_t size);
-
886 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
887 ssize_t BRLAPI_STDCALL brlapi__sendRaw(brlapi_handle_t *handle, const void *buffer, size_t size);
-
888 
-
889 /* brlapi_recvRaw */
-
896 #ifndef BRLAPI_NO_SINGLE_SESSION
-
897 ssize_t BRLAPI_STDCALL brlapi_recvRaw(void *buffer, size_t size);
-
898 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
899 ssize_t BRLAPI_STDCALL brlapi__recvRaw(brlapi_handle_t *handle, void *buffer, size_t size);
-
900 
-
901 /* brlapi_suspendDriver */
-
906 #ifndef BRLAPI_NO_SINGLE_SESSION
-
907 int BRLAPI_STDCALL brlapi_suspendDriver(const char *driver);
-
908 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
909 int BRLAPI_STDCALL brlapi__suspendDriver(brlapi_handle_t *handle, const char *driver);
-
910 
-
911 /* brlapi_resumeDriver */
-
915 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
917 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
942 /* Error codes */
-
943 #define BRLAPI_ERROR_SUCCESS 0
-
944 #define BRLAPI_ERROR_NOMEM 1
-
945 #define BRLAPI_ERROR_TTYBUSY 2
-
946 #define BRLAPI_ERROR_DEVICEBUSY 3
-
947 #define BRLAPI_ERROR_UNKNOWN_INSTRUCTION 4
-
948 #define BRLAPI_ERROR_ILLEGAL_INSTRUCTION 5
-
949 #define BRLAPI_ERROR_INVALID_PARAMETER 6
-
950 #define BRLAPI_ERROR_INVALID_PACKET 7
-
951 #define BRLAPI_ERROR_CONNREFUSED 8
-
952 #define BRLAPI_ERROR_OPNOTSUPP 9
-
953 #define BRLAPI_ERROR_GAIERR 10
-
954 #define BRLAPI_ERROR_LIBCERR 11
-
955 #define BRLAPI_ERROR_UNKNOWNTTY 12
-
956 #define BRLAPI_ERROR_PROTOCOL_VERSION 13
-
957 #define BRLAPI_ERROR_EOF 14
-
958 #define BRLAPI_ERROR_EMPTYKEY 15
-
959 #define BRLAPI_ERROR_DRIVERERROR 16
-
960 #define BRLAPI_ERROR_AUTHENTICATION 17
-
962 /* brlapi_errlist */
-
963 
-
967 extern const char *brlapi_errlist[];
-
968 
-
969 /* brlapi_nerr */
-
971 extern const int brlapi_nerr;
-
972 
-
973 /* brlapi_perror */
-
978 void BRLAPI_STDCALL brlapi_perror(const char *s);
-
979 
-
980 /* brlapi_error_t */
-
982 typedef struct {
-
983  int brlerrno;
- -
985  int gaierrno;
-
986  const char *errfun;
- -
988 
- -
998 
- -
1008 
-
1010 extern int brlapi_errno;
-
1012 extern int brlapi_libcerrno;
-
1014 extern int brlapi_gaierrno;
-
1016 extern const char *brlapi_errfun;
-
1017 
-
1019 #define brlapi_error (*brlapi_error_location())
-
1020 
-
1021 #define brlapi_errno (brlapi_error.brlerrno)
-
1022 
-
1023 #define brlapi_libcerrno (brlapi_error.libcerrno)
-
1024 
-
1025 #define brlapi_gaierrno (brlapi_error.gaierrno)
-
1026 
-
1027 #define brlapi_errfun (brlapi_error.errfun)
-
1028 
-
1029 /* brlapi_strerror */
-
1035 const char * BRLAPI_STDCALL brlapi_strerror(const brlapi_error_t *error);
-
1036 
-
1038 typedef uint32_t brlapi_packetType_t;
-
1039 
-
1040 /* brlapi_getPacketTypeName */
-
1046 const char * BRLAPI_STDCALL brlapi_getPacketTypeName(brlapi_packetType_t type);
-
1047 
-
1048 /* brlapi_exceptionHandler_t */
-
1060 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1061 typedef void (BRLAPI_STDCALL *brlapi_exceptionHandler_t)(int error, brlapi_packetType_t type, const void *packet, size_t size);
-
1062 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1063 typedef void (BRLAPI_STDCALL *brlapi__exceptionHandler_t)(brlapi_handle_t *handle, int error, brlapi_packetType_t type, const void *packet, size_t size);
+
141 #else /* BRLAPI_WIN32 */
+
142 #define BRLAPI_DEFAUTH_KEYFILE "keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE
+
143 
+
144 #ifdef USE_POLKIT
+
145 #define BRLAPI_DEFAUTH_POLKIT "+polkit"
+
146 #else /* USE_POLKIT */
+
147 #define BRLAPI_DEFAUTH_POLKIT ""
+
148 #endif /* USE_POLKIT */
+
149 
+
150 #define BRLAPI_DEFAUTH BRLAPI_DEFAUTH_KEYFILE BRLAPI_DEFAUTH_POLKIT
+
151 #endif /* BRLAPI_WIN32 */
+
152 
+
153 #ifdef __MINGW32__
+
154 typedef HANDLE brlapi_fileDescriptor;
+
155 #else /* __MINGW32__ */
+ +
157 #endif /* __MINGW32__ */
+
158 
+
189 typedef struct {
+
197  char *auth;
+
198 
+
207  char *host;
+ +
209 
+
210 /* BRLAPI_SETTINGS_INITIALIZER */
+
213 #define BRLAPI_SETTINGS_INITIALIZER { NULL, NULL }
+
214 
+
215 /* brlapi_openConnection */
+
260 #ifndef BRLAPI_NO_SINGLE_SESSION
+
261 brlapi_fileDescriptor BRLAPI_STDCALL brlapi_openConnection(const brlapi_connectionSettings_t *desiredSettings, brlapi_connectionSettings_t *actualSettings);
+
262 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
263 brlapi_fileDescriptor BRLAPI_STDCALL brlapi__openConnection(brlapi_handle_t *handle, const brlapi_connectionSettings_t *desiredSettings, brlapi_connectionSettings_t *actualSettings);
+
264 
+
265 /* brlapi_closeConnection */
+
272 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
274 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
276 
+
292 #define BRLAPI_MAXNAMELENGTH 31
+
293 
+
294 /* brlapi_getDriverName */
+
306 #ifndef BRLAPI_NO_SINGLE_SESSION
+
307 int BRLAPI_STDCALL brlapi_getDriverName(char *buffer, size_t size);
+
308 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
309 int BRLAPI_STDCALL brlapi__getDriverName(brlapi_handle_t *handle, char *buffer, size_t size);
+
310 
+
311 /* brlapi_getModelIdentifier */
+
323 #ifndef BRLAPI_NO_SINGLE_SESSION
+
324 int BRLAPI_STDCALL brlapi_getModelIdentifier(char *buffer, size_t size);
+
325 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
326 int BRLAPI_STDCALL brlapi__getModelIdentifier(brlapi_handle_t *handle, char *buffer, size_t size);
+
327 
+
328 /* brlapi_getDisplaySize */
+
330 #ifndef BRLAPI_NO_SINGLE_SESSION
+
331 int BRLAPI_STDCALL brlapi_getDisplaySize(unsigned int *x, unsigned int *y);
+
332 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
333 int BRLAPI_STDCALL brlapi__getDisplaySize(brlapi_handle_t *handle, unsigned int *x, unsigned int *y);
+
334 
+
358 /* brlapi_enterTtyMode */
+
378 #ifndef BRLAPI_NO_SINGLE_SESSION
+
379 int BRLAPI_STDCALL brlapi_enterTtyMode(int tty, const char *driver);
+
380 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
381 int BRLAPI_STDCALL brlapi__enterTtyMode(brlapi_handle_t *handle, int tty, const char *driver);
+
382 
+
392 #define BRLAPI_TTY_DEFAULT -1
+
393 
+
394 /* brlapi_enterTtyModeWithPath */
+
406 #ifndef BRLAPI_NO_SINGLE_SESSION
+
407 int BRLAPI_STDCALL brlapi_enterTtyModeWithPath(int *ttys, int count, const char *driver);
+
408 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
409 int BRLAPI_STDCALL brlapi__enterTtyModeWithPath(brlapi_handle_t *handle, int *ttys, int count, const char *driver);
+
410 
+
411 /* brlapi_leaveTtyMode */
+
418 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
420 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
422 
+
423 /* brlapi_setFocus */
+
434 #ifndef BRLAPI_NO_SINGLE_SESSION
+
435 int BRLAPI_STDCALL brlapi_setFocus(int tty);
+
436 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
437 int BRLAPI_STDCALL brlapi__setFocus(brlapi_handle_t *handle, int tty);
+
438 
+
468 /* brlapi_writeText */
+
483 #ifndef BRLAPI_NO_SINGLE_SESSION
+
484 int BRLAPI_STDCALL brlapi_writeText(int cursor, const char *text);
+
485 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
486 int BRLAPI_STDCALL brlapi__writeText(brlapi_handle_t *handle, int cursor, const char *text);
+
487 
+
488 /* brlapi_writeWText */
+
501 #ifndef BRLAPI_NO_SINGLE_SESSION
+
502 int BRLAPI_STDCALL brlapi_writeWText(int cursor, const wchar_t *text);
+
503 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
504 int BRLAPI_STDCALL brlapi__writeWText(brlapi_handle_t *handle, int cursor, const wchar_t *text);
+
505 
+
506 /* brlapi_writeDots */
+
514 #ifndef BRLAPI_NO_SINGLE_SESSION
+
515 int BRLAPI_STDCALL brlapi_writeDots(const unsigned char *dots);
+
516 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
517 int BRLAPI_STDCALL brlapi__writeDots(brlapi_handle_t *handle, const unsigned char *dots);
+
518 
+
519 /* brlapi_writeArguments_t */
+
521 typedef struct {
+
522  int displayNumber ;
+
523  unsigned int regionBegin ;
+
524  unsigned int regionSize ;
+
525  char *text ;
+
526  int textSize ;
+
527  unsigned char *andMask ;
+
528  unsigned char *orMask ;
+
529  int cursor ;
+
530  char *charset ;
+ +
532 
+
537 #define BRLAPI_DISPLAY_DEFAULT -1
+
538 
+
543 #define BRLAPI_CURSOR_LEAVE -1
+
544 
+
549 #define BRLAPI_CURSOR_OFF 0
+
550 
+
551 /* BRLAPI_WRITEARGUMENTS_INITIALIZER */
+
561 #define BRLAPI_WRITEARGUMENTS_INITIALIZER { \
+
562  .displayNumber = BRLAPI_DISPLAY_DEFAULT, \
+
563  .regionBegin = 0, \
+
564  .regionSize = 0, \
+
565  .text = NULL, \
+
566  .textSize = -1, \
+
567  .andMask = NULL, \
+
568  .orMask = NULL, \
+
569  .cursor = BRLAPI_CURSOR_LEAVE, \
+
570  .charset = NULL \
+
571 }
+
572 
+
573 /* brlapi_write */
+
609 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
611 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
613 
+
616 #include "brlapi_keycodes.h"
+
617 
+
631 /* brlapi_expandedKeyCode_t */
+
633 typedef struct {
+
634  unsigned int type ;
+
635  unsigned int command ;
+
636  unsigned int argument ;
+
637  unsigned int flags ;
+ +
639 
+
640 /* brlapi_expandKeyCode */
+ +
649 
+
650 /* brlapi_describedKeyCode_t */
+
652 typedef struct {
+
653  const char *type ;
+
654  const char *command ;
+
655  unsigned int argument ;
+
656  unsigned int flags ;
+
657  const char *flag[64 - BRLAPI_KEY_FLAGS_SHIFT] ;
+ + +
660 
+
661 /* brlapi_describeKeyCode */
+ +
670 
+
672 #define BRLAPI_UC_ROW 0x2800UL
+
673 
+
674 /* brlapi_readKey */
+
741 #ifndef BRLAPI_NO_SINGLE_SESSION
+
742 int BRLAPI_STDCALL brlapi_readKey(int wait, brlapi_keyCode_t *code);
+
743 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
744 int BRLAPI_STDCALL brlapi__readKey(brlapi_handle_t *handle, int wait, brlapi_keyCode_t *code);
+
745 
+
747 typedef enum {
+ + + + + + +
754 
+
755 /* brlapi_ignoreKeys */
+
768 #ifndef BRLAPI_NO_SINGLE_SESSION
+
769 int BRLAPI_STDCALL brlapi_ignoreKeys(brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
+
770 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
771 int BRLAPI_STDCALL brlapi__ignoreKeys(brlapi_handle_t *handle, brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
+
772 
+
773 /* brlapi_acceptKeys */
+
786 #ifndef BRLAPI_NO_SINGLE_SESSION
+
787 int BRLAPI_STDCALL brlapi_acceptKeys(brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
+
788 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
789 int BRLAPI_STDCALL brlapi__acceptKeys(brlapi_handle_t *handle, brlapi_rangeType_t type, const brlapi_keyCode_t keys[], unsigned int count);
+
790 
+
791 /* brlapi_ignoreAllKeys */
+
797 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
799 #define brlapi_ignoreAllKeys() brlapi_ignoreKeys(brlapi_rangeType_all, NULL, 0)
+
800 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
802 #define brlapi__ignoreAllKeys(handle) brlapi__ignoreKeys(handle, brlapi_rangeType_all, NULL, 0)
+
803 
+
804 /* brlapi_acceptAllKeys */
+
813 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
815 #define brlapi_acceptAllKeys() brlapi_acceptKeys(brlapi_rangeType_all, NULL, 0)
+
816 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
818 #define brlapi__acceptAllKeys(handle) brlapi__acceptKeys(handle, brlapi_rangeType_all, NULL, 0)
+
819 
+
824 typedef struct {
+ + + +
828 
+
829 /* brlapi_ignoreKeyRanges */
+
840 #ifndef BRLAPI_NO_SINGLE_SESSION
+
841 int BRLAPI_STDCALL brlapi_ignoreKeyRanges(const brlapi_range_t ranges[], unsigned int count);
+
842 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
843 int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count);
+
844 
+
845 /* brlapi_acceptKeyRanges */
+
856 #ifndef BRLAPI_NO_SINGLE_SESSION
+
857 int BRLAPI_STDCALL brlapi_acceptKeyRanges(const brlapi_range_t ranges[], unsigned int count);
+
858 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
859 int BRLAPI_STDCALL brlapi__acceptKeyRanges(brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count);
+
885 /* brlapi_enterRawMode */
+
890 #ifndef BRLAPI_NO_SINGLE_SESSION
+
891 int BRLAPI_STDCALL brlapi_enterRawMode(const char *driver);
+
892 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
893 int BRLAPI_STDCALL brlapi__enterRawMode(brlapi_handle_t *handle, const char *driver);
+
894 
+
895 /* brlapi_leaveRawMode */
+
898 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
900 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
902 
+
903 /* brlapi_sendRaw */
+
909 #ifndef BRLAPI_NO_SINGLE_SESSION
+
910 ssize_t BRLAPI_STDCALL brlapi_sendRaw(const void *buffer, size_t size);
+
911 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
912 ssize_t BRLAPI_STDCALL brlapi__sendRaw(brlapi_handle_t *handle, const void *buffer, size_t size);
+
913 
+
914 /* brlapi_recvRaw */
+
921 #ifndef BRLAPI_NO_SINGLE_SESSION
+
922 ssize_t BRLAPI_STDCALL brlapi_recvRaw(void *buffer, size_t size);
+
923 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
924 ssize_t BRLAPI_STDCALL brlapi__recvRaw(brlapi_handle_t *handle, void *buffer, size_t size);
+
925 
+
926 /* brlapi_suspendDriver */
+
931 #ifndef BRLAPI_NO_SINGLE_SESSION
+
932 int BRLAPI_STDCALL brlapi_suspendDriver(const char *driver);
+
933 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
934 int BRLAPI_STDCALL brlapi__suspendDriver(brlapi_handle_t *handle, const char *driver);
+
935 
+
936 /* brlapi_resumeDriver */
+
940 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
942 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
967 /* Error codes */
+
968 #define BRLAPI_ERROR_SUCCESS 0
+
969 #define BRLAPI_ERROR_NOMEM 1
+
970 #define BRLAPI_ERROR_TTYBUSY 2
+
971 #define BRLAPI_ERROR_DEVICEBUSY 3
+
972 #define BRLAPI_ERROR_UNKNOWN_INSTRUCTION 4
+
973 #define BRLAPI_ERROR_ILLEGAL_INSTRUCTION 5
+
974 #define BRLAPI_ERROR_INVALID_PARAMETER 6
+
975 #define BRLAPI_ERROR_INVALID_PACKET 7
+
976 #define BRLAPI_ERROR_CONNREFUSED 8
+
977 #define BRLAPI_ERROR_OPNOTSUPP 9
+
978 #define BRLAPI_ERROR_GAIERR 10
+
979 #define BRLAPI_ERROR_LIBCERR 11
+
980 #define BRLAPI_ERROR_UNKNOWNTTY 12
+
981 #define BRLAPI_ERROR_PROTOCOL_VERSION 13
+
982 #define BRLAPI_ERROR_EOF 14
+
983 #define BRLAPI_ERROR_EMPTYKEY 15
+
984 #define BRLAPI_ERROR_DRIVERERROR 16
+
985 #define BRLAPI_ERROR_AUTHENTICATION 17
+
987 /* brlapi_errlist */
+
988 
+
992 extern const char *brlapi_errlist[];
+
993 
+
994 /* brlapi_nerr */
+
996 extern const int brlapi_nerr;
+
997 
+
998 /* brlapi_perror */
+
1003 void BRLAPI_STDCALL brlapi_perror(const char *s);
+
1004 
+
1005 /* brlapi_error_t */
+
1007 typedef struct {
+ + + +
1011  const char *errfun;
+
1012 } brlapi_error_t;
+
1013 
+ +
1023 
+ +
1033 
+
1035 extern int brlapi_errno;
+
1037 extern int brlapi_libcerrno;
+
1039 extern int brlapi_gaierrno;
+
1041 extern const char *brlapi_errfun;
+
1042 
+
1044 #define brlapi_error (*brlapi_error_location())
+
1045 
+
1046 #define brlapi_errno (brlapi_error.brlerrno)
+
1047 
+
1048 #define brlapi_libcerrno (brlapi_error.libcerrno)
+
1049 
+
1050 #define brlapi_gaierrno (brlapi_error.gaierrno)
+
1051 
+
1052 #define brlapi_errfun (brlapi_error.errfun)
+
1053 
+
1054 /* brlapi_strerror */
+
1060 const char * BRLAPI_STDCALL brlapi_strerror(const brlapi_error_t *error);
+
1061 
+
1063 typedef uint32_t brlapi_packetType_t;
1064 
-
1065 /* brlapi_strexception */
-
1075 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1076 int BRLAPI_STDCALL brlapi_strexception(char *buffer, size_t bufferSize, int error, brlapi_packetType_t type, const void *packet, size_t packetSize);
-
1077 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1078 int BRLAPI_STDCALL brlapi__strexception(brlapi_handle_t *handle, char *buffer, size_t bufferSize, int error, brlapi_packetType_t type, const void *packet, size_t packetSize);
-
1079 
-
1080 /* brlapi_setExceptionHandler */
-
1089 #ifndef BRLAPI_NO_SINGLE_SESSION
- -
1091 #endif /* BRLAPI_NO_SINGLE_SESSION */
- -
1093 
-
1094 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1095 void BRLAPI_STDCALL brlapi_defaultExceptionHandler(int error, brlapi_packetType_t type, const void *packet, size_t size);
-
1096 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1097 void BRLAPI_STDCALL brlapi__defaultExceptionHandler(brlapi_handle_t *handle, int error, brlapi_packetType_t type, const void *packet, size_t size);
-
1098 
-
1101 /* Windows-specific tricks - don't look at this */
-
1102 #ifdef BRLAPI_WIN32
-
1103 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1104 int BRLAPI_STDCALL brlapi_writeTextWin(int cursor, const void *str, int wide);
-
1105 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1106 int BRLAPI_STDCALL brlapi__writeTextWin(brlapi_handle_t *handle, int cursor, const void *str, int wide);
-
1107 
-
1108 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1109 int BRLAPI_STDCALL brlapi_writeWin(const brlapi_writeArguments_t *s, int wide);
-
1110 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1111 int BRLAPI_STDCALL brlapi__writeWin(brlapi_handle_t *handle, const brlapi_writeArguments_t *s, int wide);
-
1112 
-
1113 #ifdef UNICODE
-
1114 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1115 #define brlapi_writeText(cursor, str) brlapi_writeTextWin(cursor, str, 1)
-
1116 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1117 #define brlapi__writeText(handle, cursor, str) brlapi__writeTextWin(handle, cursor, str, 1)
-
1118 
+
1065 /* brlapi_getPacketTypeName */
+
1071 const char * BRLAPI_STDCALL brlapi_getPacketTypeName(brlapi_packetType_t type);
+
1072 
+
1073 /* brlapi_exceptionHandler_t */
+
1085 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1086 typedef void (BRLAPI_STDCALL *brlapi_exceptionHandler_t)(int error, brlapi_packetType_t type, const void *packet, size_t size);
+
1087 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1088 typedef void (BRLAPI_STDCALL *brlapi__exceptionHandler_t)(brlapi_handle_t *handle, int error, brlapi_packetType_t type, const void *packet, size_t size);
+
1089 
+
1090 /* brlapi_strexception */
+
1100 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1101 int BRLAPI_STDCALL brlapi_strexception(char *buffer, size_t bufferSize, int error, brlapi_packetType_t type, const void *packet, size_t packetSize);
+
1102 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1103 int BRLAPI_STDCALL brlapi__strexception(brlapi_handle_t *handle, char *buffer, size_t bufferSize, int error, brlapi_packetType_t type, const void *packet, size_t packetSize);
+
1104 
+
1105 /* brlapi_setExceptionHandler */
+
1114 #ifndef BRLAPI_NO_SINGLE_SESSION
+ +
1116 #endif /* BRLAPI_NO_SINGLE_SESSION */
+ +
1118 
1119 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1120 #define brlapi_write(s) brlapi_writeWin(s, 1)
-
1121 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1122 #define brlapi__write(handle, s) brlapi__writeWin(handle, s, 1)
-
1123 
-
1124 #else /* UNICODE */
-
1125 
-
1126 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1127 #define brlapi_writeText(cursor, str) brlapi_writeTextWin(cursor, str, 0)
-
1128 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1129 #define brlapi__writeText(handle, cursor, str) brlapi__writeTextWin(handle, cursor, str, 0)
-
1130 
-
1131 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1132 #define brlapi_write(s) brlapi_writeWin(s, 0)
-
1133 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1134 #define brlapi__write(handle, s) brlapi__writeWin(handle, s, 0)
-
1135 
-
1136 #endif /* UNICODE */
-
1137 #endif /* BRLAPI_WIN32 */
-
1138 
-
1139 #ifndef BRLAPI_NO_DEPRECATED
-
1140 
-
1152 #define brlapi_settings_t brlapi_connectionSettings_t
-
1153 
-
1155 typedef struct {
- -
1157  unsigned int regionBegin;
-
1158  unsigned int regionSize;
-
1159  char *text;
- -
1161  unsigned char *attrAnd;
-
1162  unsigned char *attrOr;
-
1163  int cursor;
-
1164  char *charset;
- -
1166 #define BRLAPI_WRITESTRUCT_INITIALIZER BRLAPI_WRITEARGUMENTS_INITIALIZER
-
1167 
-
1168 #define brl_keycode_t brlapi_keyCode_t
-
1169 #define brl_type_t brlapi_packetType_t
-
1170 
-
1171 #define BRLCOMMANDS NULL
-
1172 #define BRL_KEYCODE_MAX BRLAPI_KEY_MAX
-
1173 
-
1174 #ifndef BRLAPI_NO_SINGLE_SESSION
-
1175 #define brlapi_initializeConnection brlapi_openConnection
-
1176 #define brlapi_getTty brlapi_enterTtyMode
-
1177 #define brlapi_getTtyPath brlapi_enterTtyModeWithPath
-
1178 #define brlapi_leaveTty brlapi_leaveTtyMode
-
1179 #define brlapi_unignoreKeyRange brlapi_acceptKeyRange
-
1180 #define brlapi_unignoreKeySet brlapi_acceptKeySet
-
1181 #define brlapi_getRaw brlapi_enterRawMode
-
1182 #define brlapi_leaveRaw brlapi_leaveRawMode
-
1183 #define brlapi_suspend brlapi_suspendDriver
-
1184 #define brlapi_resume brlapi_resumeDriver
-
1185 #endif /* BRLAPI_NO_SINGLE_SESSION */
-
1186 
-
1187 #define BRLERR_SUCCESS BRLAPI_ERROR_SUCCESS
-
1188 #define BRLERR_NOMEM BRLAPI_ERROR_NOMEM
-
1189 #define BRLERR_TTYBUSY BRLAPI_ERROR_TTYBUSY
-
1190 #define BRLERR_DEVICEBUSY BRLAPI_ERROR_DEVICEBUSY
-
1191 #define BRLERR_UNKNOWN_INSTRUCTION BRLAPI_ERROR_UNKNOWN_INSTRUCTION
-
1192 #define BRLERR_ILLEGAL_INSTRUCTION BRLAPI_ERROR_ILLEGAL_INSTRUCTION
-
1193 #define BRLERR_INVALID_PARAMETER BRLAPI_ERROR_INVALID_PARAMETER
-
1194 #define BRLERR_INVALID_PACKET BRLAPI_ERROR_INVALID_PACKET
-
1195 #define BRLERR_CONNREFUSED BRLAPI_ERROR_CONNREFUSED
-
1196 #define BRLERR_OPNOTSUPP BRLAPI_ERROR_OPNOTSUPP
-
1197 #define BRLERR_GAIERR BRLAPI_ERROR_GAIERR
-
1198 #define BRLERR_LIBCERR BRLAPI_ERROR_LIBCERR
-
1199 #define BRLERR_UNKNOWNTTY BRLAPI_ERROR_UNKNOWNTTY
-
1200 #define BRLERR_PROTOCOL_VERSION BRLAPI_ERROR_PROTOCOL_VERSION
-
1201 #define BRLERR_EOF BRLAPI_ERROR_EOF
-
1202 #define BRLERR_EMPTYKEY BRLAPI_ERROR_EMPTYKEY
-
1203 #define BRLERR_DRIVERERROR BRLAPI_ERROR_DRIVERERROR
-
1204 
-
1206 #endif /* BRLAPI_NO_DEPRECATED */
-
1207 
-
1208 #ifdef __cplusplus
-
1209 }
-
1210 #endif /* __cplusplus */
+
1120 void BRLAPI_STDCALL brlapi_defaultExceptionHandler(int error, brlapi_packetType_t type, const void *packet, size_t size);
+
1121 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1122 void BRLAPI_STDCALL brlapi__defaultExceptionHandler(brlapi_handle_t *handle, int error, brlapi_packetType_t type, const void *packet, size_t size);
+
1123 
+
1126 /* Windows-specific tricks - don't look at this */
+
1127 #ifdef BRLAPI_WIN32
+
1128 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1129 int BRLAPI_STDCALL brlapi_writeTextWin(int cursor, const void *str, int wide);
+
1130 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1131 int BRLAPI_STDCALL brlapi__writeTextWin(brlapi_handle_t *handle, int cursor, const void *str, int wide);
+
1132 
+
1133 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1134 int BRLAPI_STDCALL brlapi_writeWin(const brlapi_writeArguments_t *s, int wide);
+
1135 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1136 int BRLAPI_STDCALL brlapi__writeWin(brlapi_handle_t *handle, const brlapi_writeArguments_t *s, int wide);
+
1137 
+
1138 #ifdef UNICODE
+
1139 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1140 #define brlapi_writeText(cursor, str) brlapi_writeTextWin(cursor, str, 1)
+
1141 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1142 #define brlapi__writeText(handle, cursor, str) brlapi__writeTextWin(handle, cursor, str, 1)
+
1143 
+
1144 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1145 #define brlapi_write(s) brlapi_writeWin(s, 1)
+
1146 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1147 #define brlapi__write(handle, s) brlapi__writeWin(handle, s, 1)
+
1148 
+
1149 #else /* UNICODE */
+
1150 
+
1151 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1152 #define brlapi_writeText(cursor, str) brlapi_writeTextWin(cursor, str, 0)
+
1153 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1154 #define brlapi__writeText(handle, cursor, str) brlapi__writeTextWin(handle, cursor, str, 0)
+
1155 
+
1156 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1157 #define brlapi_write(s) brlapi_writeWin(s, 0)
+
1158 #endif /* BRLAPI_NO_SINGLE_SESSION */
+
1159 #define brlapi__write(handle, s) brlapi__writeWin(handle, s, 0)
+
1160 
+
1161 #endif /* UNICODE */
+
1162 #endif /* BRLAPI_WIN32 */
+
1163 
+
1164 #ifndef BRLAPI_NO_DEPRECATED
+
1165 
+
1177 #define brlapi_settings_t brlapi_connectionSettings_t
+
1178 
+
1180 typedef struct {
+ +
1182  unsigned int regionBegin;
+
1183  unsigned int regionSize;
+
1184  char *text;
+ +
1186  unsigned char *attrAnd;
+
1187  unsigned char *attrOr;
+
1188  int cursor;
+
1189  char *charset;
+ +
1191 #define BRLAPI_WRITESTRUCT_INITIALIZER BRLAPI_WRITEARGUMENTS_INITIALIZER
+
1192 
+
1193 #define brl_keycode_t brlapi_keyCode_t
+
1194 #define brl_type_t brlapi_packetType_t
+
1195 
+
1196 #define BRLCOMMANDS NULL
+
1197 #define BRL_KEYCODE_MAX BRLAPI_KEY_MAX
+
1198 
+
1199 #ifndef BRLAPI_NO_SINGLE_SESSION
+
1200 #define brlapi_initializeConnection brlapi_openConnection
+
1201 #define brlapi_getTty brlapi_enterTtyMode
+
1202 #define brlapi_getTtyPath brlapi_enterTtyModeWithPath
+
1203 #define brlapi_leaveTty brlapi_leaveTtyMode
+
1204 #define brlapi_unignoreKeyRange brlapi_acceptKeyRange
+
1205 #define brlapi_unignoreKeySet brlapi_acceptKeySet
+
1206 #define brlapi_getRaw brlapi_enterRawMode
+
1207 #define brlapi_leaveRaw brlapi_leaveRawMode
+
1208 #define brlapi_suspend brlapi_suspendDriver
+
1209 #define brlapi_resume brlapi_resumeDriver
+
1210 #endif /* BRLAPI_NO_SINGLE_SESSION */
1211 
-
1212 #endif /* BRLAPI_INCLUDED */
+
1212 #define BRLERR_SUCCESS BRLAPI_ERROR_SUCCESS
+
1213 #define BRLERR_NOMEM BRLAPI_ERROR_NOMEM
+
1214 #define BRLERR_TTYBUSY BRLAPI_ERROR_TTYBUSY
+
1215 #define BRLERR_DEVICEBUSY BRLAPI_ERROR_DEVICEBUSY
+
1216 #define BRLERR_UNKNOWN_INSTRUCTION BRLAPI_ERROR_UNKNOWN_INSTRUCTION
+
1217 #define BRLERR_ILLEGAL_INSTRUCTION BRLAPI_ERROR_ILLEGAL_INSTRUCTION
+
1218 #define BRLERR_INVALID_PARAMETER BRLAPI_ERROR_INVALID_PARAMETER
+
1219 #define BRLERR_INVALID_PACKET BRLAPI_ERROR_INVALID_PACKET
+
1220 #define BRLERR_CONNREFUSED BRLAPI_ERROR_CONNREFUSED
+
1221 #define BRLERR_OPNOTSUPP BRLAPI_ERROR_OPNOTSUPP
+
1222 #define BRLERR_GAIERR BRLAPI_ERROR_GAIERR
+
1223 #define BRLERR_LIBCERR BRLAPI_ERROR_LIBCERR
+
1224 #define BRLERR_UNKNOWNTTY BRLAPI_ERROR_UNKNOWNTTY
+
1225 #define BRLERR_PROTOCOL_VERSION BRLAPI_ERROR_PROTOCOL_VERSION
+
1226 #define BRLERR_EOF BRLAPI_ERROR_EOF
+
1227 #define BRLERR_EMPTYKEY BRLAPI_ERROR_EMPTYKEY
+
1228 #define BRLERR_DRIVERERROR BRLAPI_ERROR_DRIVERERROR
+
1229 
+
1231 #endif /* BRLAPI_NO_DEPRECATED */
+
1232 
+
1233 #ifdef __cplusplus
+
1234 }
+
1235 #endif /* __cplusplus */
+
1236 
+
1237 #endif /* BRLAPI_INCLUDED */
+ + diff --git a/Documents/BrlAPIref/html/brlapi__protocol_8h_source.html b/Documents/BrlAPIref/html/brlapi__protocol_8h_source.html index f0e90acd..cc5a48c9 100644 --- a/Documents/BrlAPIref/html/brlapi__protocol_8h_source.html +++ b/Documents/BrlAPIref/html/brlapi__protocol_8h_source.html @@ -54,7 +54,7 @@ Go to the documentation of this file.
1 /*
2  * libbrlapi - A library providing access to braille terminals for applications.
3  *
-
4  * Copyright (C) 2002-2017 by
+
4  * Copyright (C) 2002-2018 by
5  * Samuel Thibault <Samuel.Thibault@ens-lyon.org>
6  * Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org>
7  *
@@ -94,95 +94,96 @@
58 #define BRLAPI_PACKET_VERSION 'v'
59 #define BRLAPI_PACKET_AUTH 'a'
60 #define BRLAPI_PACKET_GETDRIVERNAME 'n'
-
61 #define BRLAPI_PACKET_GETDISPLAYSIZE 's'
-
62 #define BRLAPI_PACKET_ENTERTTYMODE 't'
-
63 #define BRLAPI_PACKET_SETFOCUS 'F'
-
64 #define BRLAPI_PACKET_LEAVETTYMODE 'L'
-
65 #define BRLAPI_PACKET_KEY 'k'
-
66 #define BRLAPI_PACKET_IGNOREKEYRANGES 'm'
-
67 #define BRLAPI_PACKET_ACCEPTKEYRANGES 'u'
-
68 #define BRLAPI_PACKET_WRITE 'w'
-
69 #define BRLAPI_PACKET_ENTERRAWMODE '*'
-
70 #define BRLAPI_PACKET_LEAVERAWMODE '#'
-
71 #define BRLAPI_PACKET_PACKET 'p'
-
72 #define BRLAPI_PACKET_ACK 'A'
-
73 #define BRLAPI_PACKET_ERROR 'e'
-
74 #define BRLAPI_PACKET_EXCEPTION 'E'
-
75 #define BRLAPI_PACKET_SUSPENDDRIVER 'S'
-
76 #define BRLAPI_PACKET_RESUMEDRIVER 'R'
-
79 #define BRLAPI_DEVICE_MAGIC (0xdeadbeefL)
-
80 
-
82 typedef struct {
-
83  uint32_t size;
- - -
86 
-
88 #define BRLAPI_HEADERSIZE sizeof(brlapi_header_t)
-
89 
-
91 typedef struct {
-
92  uint32_t protocolVersion;
- -
94 
-
96 typedef struct {
-
97  uint32_t type;
-
98  unsigned char key;
- -
100 
-
101 typedef struct {
-
102  uint32_t type[1];
- -
104 
-
105 #define BRLAPI_AUTH_NONE 'N'
-
106 #define BRLAPI_AUTH_KEY 'K'
-
107 #define BRLAPI_AUTH_CRED 'C'
-
110 typedef struct {
-
111  uint32_t code;
- -
113  unsigned char packet;
- -
115 
-
117 typedef struct {
-
118  uint32_t magic;
-
119  unsigned char nameLength;
-
120  char name;
- -
122 
-
124 #define BRLAPI_WF_DISPLAYNUMBER 0X01
-
125 #define BRLAPI_WF_REGION 0X02
-
126 #define BRLAPI_WF_TEXT 0X04
-
127 #define BRLAPI_WF_ATTR_AND 0X08
-
128 #define BRLAPI_WF_ATTR_OR 0X10
-
129 #define BRLAPI_WF_CURSOR 0X20
-
130 #define BRLAPI_WF_CHARSET 0X40
-
133 typedef struct {
-
134  uint32_t flags;
-
135  unsigned char data;
- -
137 
-
140 typedef union {
-
141  unsigned char data[BRLAPI_MAXPACKETSIZE];
- - - - - - -
148  uint32_t uint32;
- -
150 
-
151 /* brlapi_writePacket */
-
167 ssize_t brlapi_writePacket(brlapi_fileDescriptor fd, brlapi_packetType_t type, const void *buf, size_t size);
-
168 
-
169 /* brlapi_readPacketHeader */
- -
187 
-
188 /* brlapi_readPacketContent */
-
209 ssize_t brlapi_readPacketContent(brlapi_fileDescriptor fd, size_t packetSize, void *buf, size_t bufSize);
-
210 
-
211 /* brlapi_readPacket */
-
233 ssize_t brlapi_readPacket(brlapi_fileDescriptor fd, brlapi_packetType_t *type, void *buf, size_t size);
-
234 
-
235 /* brlapi_fd_mutex */
+
61 #define BRLAPI_PACKET_GETMODELID 'd'
+
62 #define BRLAPI_PACKET_GETDISPLAYSIZE 's'
+
63 #define BRLAPI_PACKET_ENTERTTYMODE 't'
+
64 #define BRLAPI_PACKET_SETFOCUS 'F'
+
65 #define BRLAPI_PACKET_LEAVETTYMODE 'L'
+
66 #define BRLAPI_PACKET_KEY 'k'
+
67 #define BRLAPI_PACKET_IGNOREKEYRANGES 'm'
+
68 #define BRLAPI_PACKET_ACCEPTKEYRANGES 'u'
+
69 #define BRLAPI_PACKET_WRITE 'w'
+
70 #define BRLAPI_PACKET_ENTERRAWMODE '*'
+
71 #define BRLAPI_PACKET_LEAVERAWMODE '#'
+
72 #define BRLAPI_PACKET_PACKET 'p'
+
73 #define BRLAPI_PACKET_ACK 'A'
+
74 #define BRLAPI_PACKET_ERROR 'e'
+
75 #define BRLAPI_PACKET_EXCEPTION 'E'
+
76 #define BRLAPI_PACKET_SUSPENDDRIVER 'S'
+
77 #define BRLAPI_PACKET_RESUMEDRIVER 'R'
+
80 #define BRLAPI_DEVICE_MAGIC (0xdeadbeefL)
+
81 
+
83 typedef struct {
+
84  uint32_t size;
+ + +
87 
+
89 #define BRLAPI_HEADERSIZE sizeof(brlapi_header_t)
+
90 
+
92 typedef struct {
+
93  uint32_t protocolVersion;
+ +
95 
+
97 typedef struct {
+
98  uint32_t type;
+
99  unsigned char key;
+ +
101 
+
102 typedef struct {
+
103  uint32_t type[1];
+ +
105 
+
106 #define BRLAPI_AUTH_NONE 'N'
+
107 #define BRLAPI_AUTH_KEY 'K'
+
108 #define BRLAPI_AUTH_CRED 'C'
+
111 typedef struct {
+
112  uint32_t code;
+ +
114  unsigned char packet;
+ +
116 
+
118 typedef struct {
+
119  uint32_t magic;
+
120  unsigned char nameLength;
+
121  char name;
+ +
123 
+
125 #define BRLAPI_WF_DISPLAYNUMBER 0X01
+
126 #define BRLAPI_WF_REGION 0X02
+
127 #define BRLAPI_WF_TEXT 0X04
+
128 #define BRLAPI_WF_ATTR_AND 0X08
+
129 #define BRLAPI_WF_ATTR_OR 0X10
+
130 #define BRLAPI_WF_CURSOR 0X20
+
131 #define BRLAPI_WF_CHARSET 0X40
+
134 typedef struct {
+
135  uint32_t flags;
+
136  unsigned char data;
+ +
138 
+
141 typedef union {
+
142  unsigned char data[BRLAPI_MAXPACKETSIZE];
+ + + + + + +
149  uint32_t uint32;
+ +
151 
+
152 /* brlapi_writePacket */
+
168 ssize_t brlapi_writePacket(brlapi_fileDescriptor fd, brlapi_packetType_t type, const void *buf, size_t size);
+
169 
+
170 /* brlapi_readPacketHeader */
+ +
188 
+
189 /* brlapi_readPacketContent */
+
210 ssize_t brlapi_readPacketContent(brlapi_fileDescriptor fd, size_t packetSize, void *buf, size_t bufSize);
+
211 
+
212 /* brlapi_readPacket */
+
234 ssize_t brlapi_readPacket(brlapi_fileDescriptor fd, brlapi_packetType_t *type, void *buf, size_t size);
+
235 
+
236 /* brlapi_fd_mutex */
262 #ifdef __MINGW32__
263 #include <windows.h>
264 extern HANDLE brlapi_fd_mutex;
diff --git a/Documents/BrlAPIref/html/globals.html b/Documents/BrlAPIref/html/globals.html index aba63abf..58ae8e74 100644 --- a/Documents/BrlAPIref/html/globals.html +++ b/Documents/BrlAPIref/html/globals.html @@ -76,7 +76,7 @@ : brlapi.h
  • brlapi__acceptKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi__acceptKeys() : brlapi.h @@ -105,11 +105,14 @@
  • brlapi__getDriverName() : brlapi.h
  • +
  • brlapi__getModelIdentifier() +: brlapi.h +
  • brlapi__ignoreAllKeys : brlapi.h
  • brlapi__ignoreKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi__ignoreKeys() : brlapi.h @@ -163,7 +166,7 @@ : brlapi.h
  • brlapi_acceptKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi_acceptKeys() : brlapi.h @@ -195,6 +198,12 @@
  • BRLAPI_DEFAUTH : brlapi.h
  • +
  • BRLAPI_DEFAUTH_KEYFILE +: brlapi.h +
  • +
  • BRLAPI_DEFAUTH_POLKIT +: brlapi.h +
  • brlapi_describeKeyCode() : brlapi.h
  • @@ -342,6 +351,9 @@
  • brlapi_getHandleSize() : brlapi.h
  • +
  • brlapi_getModelIdentifier() +: brlapi.h +
  • brlapi_getPacketTypeName() : brlapi.h
  • @@ -364,7 +376,7 @@ : brlapi.h
  • brlapi_ignoreKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi_ignoreKeys() : brlapi.h @@ -1074,6 +1086,9 @@
  • BRLAPI_PACKET_GETDRIVERNAME : brlapi_protocol.h
  • +
  • BRLAPI_PACKET_GETMODELID +: brlapi_protocol.h +
  • BRLAPI_PACKET_IGNOREKEYRANGES : brlapi_protocol.h
  • diff --git a/Documents/BrlAPIref/html/globals_defs.html b/Documents/BrlAPIref/html/globals_defs.html index 831a089a..af506bc6 100644 --- a/Documents/BrlAPIref/html/globals_defs.html +++ b/Documents/BrlAPIref/html/globals_defs.html @@ -102,6 +102,12 @@
  • BRLAPI_DEFAUTH : brlapi.h
  • +
  • BRLAPI_DEFAUTH_KEYFILE +: brlapi.h +
  • +
  • BRLAPI_DEFAUTH_POLKIT +: brlapi.h +
  • BRLAPI_DEVICE_MAGIC : brlapi_protocol.h
  • @@ -915,6 +921,9 @@
  • BRLAPI_PACKET_GETDRIVERNAME : brlapi_protocol.h
  • +
  • BRLAPI_PACKET_GETMODELID +: brlapi_protocol.h +
  • BRLAPI_PACKET_IGNOREKEYRANGES : brlapi_protocol.h
  • diff --git a/Documents/BrlAPIref/html/globals_func.html b/Documents/BrlAPIref/html/globals_func.html index 8fea5cb1..e5595634 100644 --- a/Documents/BrlAPIref/html/globals_func.html +++ b/Documents/BrlAPIref/html/globals_func.html @@ -66,7 +66,7 @@ : brlapi.h
  • brlapi__acceptKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi__acceptKeys() : brlapi.h @@ -92,11 +92,14 @@
  • brlapi__getDriverName() : brlapi.h
  • +
  • brlapi__getModelIdentifier() +: brlapi.h +
  • brlapi__ignoreAllKeys() : brlapi.h
  • brlapi__ignoreKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi__ignoreKeys() : brlapi.h @@ -147,7 +150,7 @@ : brlapi.h
  • brlapi_acceptKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi_acceptKeys() : brlapi.h @@ -185,11 +188,14 @@
  • brlapi_getHandleSize() : brlapi.h
  • +
  • brlapi_getModelIdentifier() +: brlapi.h +
  • brlapi_getPacketTypeName() : brlapi.h
  • brlapi_ignoreKeyRanges() -: brlapi.h +: brlapi.h
  • brlapi_ignoreKeys() : brlapi.h diff --git a/Documents/BrlAPIref/html/group__brlapi__connection.html b/Documents/BrlAPIref/html/group__brlapi__connection.html index 797e0011..257dfde8 100644 --- a/Documents/BrlAPIref/html/group__brlapi__connection.html +++ b/Documents/BrlAPIref/html/group__brlapi__connection.html @@ -65,7 +65,11 @@ Macros
  • - + + + + + @@ -110,12 +114,36 @@ Functions

    Macros

    #define BRLAPI_RELEASE   "0.6.6"
    #define BRLAPI_RELEASE   "0.6.7"
     
    #define BRLAPI_MAJOR   0
     
    #define BRLAPI_MINOR   6
     
    #define BRLAPI_REVISION   6
    #define BRLAPI_REVISION   7
     
    #define BRLAPI_STDCALL
     
     
    #define BRLAPI_AUTHKEYFILE   "brlapi.key"
     
    #define BRLAPI_DEFAUTH   "polkit+keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE
    #define BRLAPI_DEFAUTH_KEYFILE   "keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE
     
    #define BRLAPI_DEFAUTH_POLKIT   ""
     
    #define BRLAPI_DEFAUTH   BRLAPI_DEFAUTH_KEYFILE BRLAPI_DEFAUTH_POLKIT
     
    #define BRLAPI_SETTINGS_INITIALIZER   { NULL, NULL }
     
     
    int BRLAPI_STDCALL brlapi__getDriverName (brlapi_handle_t *handle, char *buffer, size_t size)
     
    int BRLAPI_STDCALL brlapi_getModelIdentifier (char *buffer, size_t size)
     
    int BRLAPI_STDCALL brlapi__getModelIdentifier (brlapi_handle_t *handle, char *buffer, size_t size)
     
    int BRLAPI_STDCALL brlapi_getDisplaySize (unsigned int *x, unsigned int *y)
     
    int BRLAPI_STDCALL brlapi__getDisplaySize (brlapi_handle_t *handle, unsigned int *x, unsigned int *y)
     
    int BRLAPI_STDCALL brlapi__acceptAllKeys (brlapi_handle_t *handle)
     
    int BRLAPI_STDCALL brlapi_ignoreKeyRanges (brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi__ignoreKeyRanges (brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi_acceptKeyRanges (brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi__acceptKeyRanges (brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi_ignoreKeyRanges (const brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi__ignoreKeyRanges (brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi_acceptKeyRanges (const brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi__acceptKeyRanges (brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count)
     
    int BRLAPI_STDCALL brlapi_enterRawMode (const char *driver)
     
    int BRLAPI_STDCALL brlapi__enterRawMode (brlapi_handle_t *handle, const char *driver)
     
    #define BRLAPI_PACKET_GETDRIVERNAME   'n'
     
    #define BRLAPI_PACKET_GETMODELID   'd'
     
    #define BRLAPI_PACKET_GETDISPLAYSIZE   's'
     
    #define BRLAPI_PACKET_ENTERTTYMODE   't'
     
    #define BRLAPI_AUTHKEYFILE   "brlapi.key"
     
    #define BRLAPI_DEFAUTH   "polkit+keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE
    #define BRLAPI_DEFAUTH_KEYFILE   "keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE
     
    #define BRLAPI_DEFAUTH_POLKIT   ""
     
    #define BRLAPI_DEFAUTH   BRLAPI_DEFAUTH_KEYFILE BRLAPI_DEFAUTH_POLKIT
     
    #define BRLAPI_SETTINGS_INITIALIZER   { NULL, NULL }
     
    - + + +
    #define BRLAPI_DEFAUTH   "polkit+keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE#define BRLAPI_DEFAUTH   BRLAPI_DEFAUTH_KEYFILE BRLAPI_DEFAUTH_POLKIT
    +
    + +
    + + +
    +
    + + +
    #define BRLAPI_DEFAUTH_KEYFILE   "keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE

    Default authorization setting

    +
    +
    + +
    +
    + + + + +
    #define BRLAPI_DEFAUTH_POLKIT   ""
    +
    +
    diff --git a/Documents/BrlAPIref/html/group__brlapi__info.html b/Documents/BrlAPIref/html/group__brlapi__info.html index a4281905..f0c6877d 100644 --- a/Documents/BrlAPIref/html/group__brlapi__info.html +++ b/Documents/BrlAPIref/html/group__brlapi__info.html @@ -59,6 +59,10 @@ Functions   int BRLAPI_STDCALL brlapi__getDriverName (brlapi_handle_t *handle, char *buffer, size_t size)   +int BRLAPI_STDCALL brlapi_getModelIdentifier (char *buffer, size_t size) +  +int BRLAPI_STDCALL brlapi__getModelIdentifier (brlapi_handle_t *handle, char *buffer, size_t size) +  int BRLAPI_STDCALL brlapi_getDisplaySize (unsigned int *x, unsigned int *y)   int BRLAPI_STDCALL brlapi__getDisplaySize (brlapi_handle_t *handle, unsigned int *x, unsigned int *y) @@ -144,6 +148,38 @@ Functions
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int BRLAPI_STDCALL brlapi__getModelIdentifier (brlapi_handle_thandle,
    char * buffer,
    size_t size 
    )
    +
    +
    @@ -197,15 +233,51 @@ Functions

    Return the complete name of the driver used by brltty

    -

    This function fills its argument with the whole name of the braille terminal if available, terminated with a '\0'.

    +

    This function fills its argument with the whole name of the braille driver if available, terminated with a '\0'.

    Parameters
    - +
    bufferis the buffer given by the application;
    bufferis the buffer provided by the application;
    sizeis the maximum size for the name buffer.
    -
    Returns
    -1 on error, or a positive value giving the size of the needed buffer, if the supplied one is to small (same as snprintf()).
    +
    Returns
    -1 on error, or a positive value giving the size of the needed buffer, if the supplied one is too small (same as snprintf()).
    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + +
    int BRLAPI_STDCALL brlapi_getModelIdentifier (char * buffer,
    size_t size 
    )
    +
    +

    Return an identifier for the device model used by brltty

    +

    This function fills its argument with the whole identifier of the braille device model if available, terminated with a '\0'.

    +
    Parameters
    + + + +
    bufferis the buffer given by the application;
    sizeis the maximum size for the identifier buffer.
    +
    +
    +
    Returns
    -1 on error, or a positive value giving the size of the needed buffer, if the supplied one is too small (same as snprintf()).
    diff --git a/Documents/BrlAPIref/html/group__brlapi__keys.html b/Documents/BrlAPIref/html/group__brlapi__keys.html index 688209de..f4be75c8 100644 --- a/Documents/BrlAPIref/html/group__brlapi__keys.html +++ b/Documents/BrlAPIref/html/group__brlapi__keys.html @@ -107,14 +107,14 @@ Functions   int BRLAPI_STDCALL brlapi__acceptAllKeys (brlapi_handle_t *handle)   -int BRLAPI_STDCALL brlapi_ignoreKeyRanges (brlapi_range_t ranges[], unsigned int count) -  -int BRLAPI_STDCALL brlapi__ignoreKeyRanges (brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count) -  -int BRLAPI_STDCALL brlapi_acceptKeyRanges (brlapi_range_t ranges[], unsigned int count) -  -int BRLAPI_STDCALL brlapi__acceptKeyRanges (brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count) -  +int BRLAPI_STDCALL brlapi_ignoreKeyRanges (const brlapi_range_t ranges[], unsigned int count) +  +int BRLAPI_STDCALL brlapi__ignoreKeyRanges (brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count) +  +int BRLAPI_STDCALL brlapi_acceptKeyRanges (const brlapi_range_t ranges[], unsigned int count) +  +int BRLAPI_STDCALL brlapi__acceptKeyRanges (brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count) + 

    Detailed Description

    Once brlapi_enterTtyMode() has been called, the application can call brlapi_readKey() to read key presses. Either key codes (see Types and Defines fore BrlAPI Key Codes) or commands will be returned, depending on parameters given to brlapi_enterTtyMode().

    @@ -250,7 +250,7 @@ Functions - +
    @@ -263,7 +263,7 @@ Functions - + @@ -336,7 +336,7 @@ Functions - +
    brlapi_range_t const brlapi_range_t  ranges[],
    @@ -349,7 +349,7 @@ Functions - + @@ -438,14 +438,14 @@ Functions - +
    brlapi_range_t const brlapi_range_t  ranges[],
    - + @@ -587,14 +587,14 @@ Functions - +
    int BRLAPI_STDCALL brlapi_acceptKeyRanges (brlapi_range_t const brlapi_range_t  ranges[],
    - + diff --git a/Documents/BrlAPIref/html/group__brlapi__protocol.html b/Documents/BrlAPIref/html/group__brlapi__protocol.html index 41e9dba4..f9719557 100644 --- a/Documents/BrlAPIref/html/group__brlapi__protocol.html +++ b/Documents/BrlAPIref/html/group__brlapi__protocol.html @@ -81,6 +81,8 @@ Macros + + @@ -350,6 +352,19 @@ Variables

    Ask which driver is used

    +
    + + +
    +
    +
    int BRLAPI_STDCALL brlapi_ignoreKeyRanges (brlapi_range_t const brlapi_range_t  ranges[],
     
    #define BRLAPI_PACKET_GETDRIVERNAME   'n'
     
    #define BRLAPI_PACKET_GETMODELID   'd'
     
    #define BRLAPI_PACKET_GETDISPLAYSIZE   's'
     
    #define BRLAPI_PACKET_ENTERTTYMODE   't'
    + + + +
    #define BRLAPI_PACKET_GETMODELID   'd'
    +
    +

    Ask which model is used

    +
    @@ -770,7 +785,6 @@ Variables
  • brlapi_leaveRawMode()
  • brlapi_sendRaw()
  • brlapi_recvRaw()
  • -
  • brlapi_getDriverId()
  • brlapi_getDriverName()
  • brlapi_getDisplaySize()
  • brlapi_enterTtyMode()
  • diff --git a/Documents/BrlAPIref/html/group__brlapi__version.html b/Documents/BrlAPIref/html/group__brlapi__version.html index 9a2f50e4..cf4e5fdd 100644 --- a/Documents/BrlAPIref/html/group__brlapi__version.html +++ b/Documents/BrlAPIref/html/group__brlapi__version.html @@ -46,13 +46,13 @@ - + - +

    Macros

    #define BRLAPI_RELEASE   "0.6.6"
    #define BRLAPI_RELEASE   "0.6.7"
     
    #define BRLAPI_MAJOR   0
     
    #define BRLAPI_MINOR   6
     
    #define BRLAPI_REVISION   6
    #define BRLAPI_REVISION   7
     

    Detailed Description

    @@ -88,7 +88,7 @@ Macros
    - +
    #define BRLAPI_RELEASE   "0.6.6"#define BRLAPI_RELEASE   "0.6.7"
    @@ -101,7 +101,7 @@ Macros
    - +
    #define BRLAPI_REVISION   6#define BRLAPI_REVISION   7
    diff --git a/Documents/BrlAPIref/html/group__brlapi__write.html b/Documents/BrlAPIref/html/group__brlapi__write.html index c41a804e..07d7bbd2 100644 --- a/Documents/BrlAPIref/html/group__brlapi__write.html +++ b/Documents/BrlAPIref/html/group__brlapi__write.html @@ -353,7 +353,7 @@ Text is translated by the server one to one, by just using a simple wchar_t to p

    Write the given \0-terminated string to the braille display

    -

    If the string is too long, it is truncated. If it's too short, it is padded with spaces. The text is assumed to be in the current locale charset, or latin1 if locales have not been initialized. To initialize locales, use setlocale(3).

    +

    If the string is too long, it is truncated. If it's too short, it is padded with spaces. The text is assumed to be in the current locale charset set by setlocale(3) if it was called, or the locale charset from the locale environment variables if setlocale(3) was not called.

    Parameters
    diff --git a/Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_KEYFILE.3 b/Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_KEYFILE.3 new file mode 100644 index 00000000..246c5531 --- /dev/null +++ b/Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_KEYFILE.3 @@ -0,0 +1 @@ +.so man3/brlapi_connection.3 diff --git a/Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_POLKIT.3 b/Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_POLKIT.3 new file mode 100644 index 00000000..246c5531 --- /dev/null +++ b/Documents/BrlAPIref/man/man3/BRLAPI_DEFAUTH_POLKIT.3 @@ -0,0 +1 @@ +.so man3/brlapi_connection.3 diff --git a/Documents/BrlAPIref/man/man3/BRLAPI_PACKET_GETMODELID.3 b/Documents/BrlAPIref/man/man3/BRLAPI_PACKET_GETMODELID.3 new file mode 100644 index 00000000..e44f63f4 --- /dev/null +++ b/Documents/BrlAPIref/man/man3/BRLAPI_PACKET_GETMODELID.3 @@ -0,0 +1 @@ +.so man3/brlapi_protocol.3 diff --git a/Documents/BrlAPIref/man/man3/_tmp_mktar.1qJHCE_brltty-5.5_Programs_.3 b/Documents/BrlAPIref/man/man3/_tmp_mktar.Mu3gIQ_brltty-5.6_Programs_.3 similarity index 82% rename from Documents/BrlAPIref/man/man3/_tmp_mktar.1qJHCE_brltty-5.5_Programs_.3 rename to Documents/BrlAPIref/man/man3/_tmp_mktar.Mu3gIQ_brltty-5.6_Programs_.3 index dc800211..bd87ef8b 100644 --- a/Documents/BrlAPIref/man/man3/_tmp_mktar.1qJHCE_brltty-5.5_Programs_.3 +++ b/Documents/BrlAPIref/man/man3/_tmp_mktar.Mu3gIQ_brltty-5.6_Programs_.3 @@ -1,4 +1,4 @@ -.TH "Programs Directory Reference" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Programs Directory Reference" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi.h.3 b/Documents/BrlAPIref/man/man3/brlapi.h.3 index b193320b..6ed0f930 100644 --- a/Documents/BrlAPIref/man/man3/brlapi.h.3 +++ b/Documents/BrlAPIref/man/man3/brlapi.h.3 @@ -1,4 +1,4 @@ -.TH "brlapi.h" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi.h" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -52,7 +52,7 @@ Types, defines and functions prototypes for \fIBrlAPI's\fP library\&. .in +1c .ti -1c -.RI "#define \fBBRLAPI_RELEASE\fP '0\&.6\&.6'" +.RI "#define \fBBRLAPI_RELEASE\fP '0\&.6\&.7'" .br .ti -1c .RI "#define \fBBRLAPI_MAJOR\fP 0" @@ -61,7 +61,7 @@ Types, defines and functions prototypes for \fIBrlAPI's\fP library\&. .RI "#define \fBBRLAPI_MINOR\fP 6" .br .ti -1c -.RI "#define \fBBRLAPI_REVISION\fP 6" +.RI "#define \fBBRLAPI_REVISION\fP 7" .br .ti -1c .RI "#define \fBBRLAPI_STDCALL\fP" @@ -82,7 +82,13 @@ Types, defines and functions prototypes for \fIBrlAPI's\fP library\&. .RI "#define \fBBRLAPI_AUTHKEYFILE\fP 'brlapi\&.key'" .br .ti -1c -.RI "#define \fBBRLAPI_DEFAUTH\fP 'polkit+keyfile:' BRLAPI_ETCDIR '/' \fBBRLAPI_AUTHKEYFILE\fP" +.RI "#define \fBBRLAPI_DEFAUTH_KEYFILE\fP 'keyfile:' BRLAPI_ETCDIR '/' \fBBRLAPI_AUTHKEYFILE\fP" +.br +.ti -1c +.RI "#define \fBBRLAPI_DEFAUTH_POLKIT\fP ''" +.br +.ti -1c +.RI "#define \fBBRLAPI_DEFAUTH\fP \fBBRLAPI_DEFAUTH_KEYFILE\fP \fBBRLAPI_DEFAUTH_POLKIT\fP" .br .ti -1c .RI "#define \fBBRLAPI_SETTINGS_INITIALIZER\fP { NULL, NULL }" @@ -344,6 +350,12 @@ Types, defines and functions prototypes for \fIBrlAPI's\fP library\&. .RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__getDriverName\fP (\fBbrlapi_handle_t\fP *handle, char *buffer, size_t size)" .br .ti -1c +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_getModelIdentifier\fP (char *buffer, size_t size)" +.br +.ti -1c +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__getModelIdentifier\fP (\fBbrlapi_handle_t\fP *handle, char *buffer, size_t size)" +.br +.ti -1c .RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_getDisplaySize\fP (unsigned int *x, unsigned int *y)" .br .ti -1c @@ -428,16 +440,16 @@ Types, defines and functions prototypes for \fIBrlAPI's\fP library\&. .RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__acceptAllKeys\fP (\fBbrlapi_handle_t\fP *handle)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_ignoreKeyRanges\fP (\fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_ignoreKeyRanges\fP (const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__ignoreKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__ignoreKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_acceptKeyRanges\fP (\fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_acceptKeyRanges\fP (const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__acceptKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__acceptKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .ti -1c .RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_enterRawMode\fP (const char *driver)" diff --git a/Documents/BrlAPIref/man/man3/brlapi__getModelIdentifier.3 b/Documents/BrlAPIref/man/man3/brlapi__getModelIdentifier.3 new file mode 100644 index 00000000..5dcc6624 --- /dev/null +++ b/Documents/BrlAPIref/man/man3/brlapi__getModelIdentifier.3 @@ -0,0 +1 @@ +.so man3/brlapi_info.3 diff --git a/Documents/BrlAPIref/man/man3/brlapi_authClientPacket_t.3 b/Documents/BrlAPIref/man/man3/brlapi_authClientPacket_t.3 index c0f263d9..8a77c421 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_authClientPacket_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_authClientPacket_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_authClientPacket_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_authClientPacket_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_authServerPacket_t.3 b/Documents/BrlAPIref/man/man3/brlapi_authServerPacket_t.3 index 871319d1..286b7b13 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_authServerPacket_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_authServerPacket_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_authServerPacket_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_authServerPacket_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_connection.3 b/Documents/BrlAPIref/man/man3/brlapi_connection.3 index aa6c95a2..1cc02062 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_connection.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_connection.3 @@ -1,4 +1,4 @@ -.TH "Connecting to BrlAPI" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Connecting to BrlAPI" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -30,7 +30,13 @@ Connecting to BrlAPI \- .RI "#define \fBBRLAPI_AUTHKEYFILE\fP 'brlapi\&.key'" .br .ti -1c -.RI "#define \fBBRLAPI_DEFAUTH\fP 'polkit+keyfile:' BRLAPI_ETCDIR '/' \fBBRLAPI_AUTHKEYFILE\fP" +.RI "#define \fBBRLAPI_DEFAUTH_KEYFILE\fP 'keyfile:' BRLAPI_ETCDIR '/' \fBBRLAPI_AUTHKEYFILE\fP" +.br +.ti -1c +.RI "#define \fBBRLAPI_DEFAUTH_POLKIT\fP ''" +.br +.ti -1c +.RI "#define \fBBRLAPI_DEFAUTH\fP \fBBRLAPI_DEFAUTH_KEYFILE\fP \fBBRLAPI_DEFAUTH_POLKIT\fP" .br .ti -1c .RI "#define \fBBRLAPI_SETTINGS_INITIALIZER\fP { NULL, NULL }" @@ -72,8 +78,12 @@ Before calling any other function of the library, calling \fBbrlapi_openConnecti Default name of the file containing \fIBrlAPI\fP 's authorization key .PP This name is relative to BRLAPI_ETCDIR -.SS "#define BRLAPI_DEFAUTH 'polkit+keyfile:' BRLAPI_ETCDIR '/' \fBBRLAPI_AUTHKEYFILE\fP" +.SS "#define BRLAPI_DEFAUTH \fBBRLAPI_DEFAUTH_KEYFILE\fP \fBBRLAPI_DEFAUTH_POLKIT\fP" + +.SS "#define BRLAPI_DEFAUTH_KEYFILE 'keyfile:' BRLAPI_ETCDIR '/' \fBBRLAPI_AUTHKEYFILE\fP" Default authorization setting +.SS "#define BRLAPI_DEFAUTH_POLKIT ''" + .SS "#define BRLAPI_ETCDIR '/etc'" \fIbrltty\fP 's settings directory .PP diff --git a/Documents/BrlAPIref/man/man3/brlapi_connectionSettings_t.3 b/Documents/BrlAPIref/man/man3/brlapi_connectionSettings_t.3 index 6bd27ea7..ca5cf77a 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_connectionSettings_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_connectionSettings_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_connectionSettings_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_connectionSettings_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_constants.h.3 b/Documents/BrlAPIref/man/man3/brlapi_constants.h.3 index bd3dc021..fd0ec72f 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_constants.h.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_constants.h.3 @@ -1,4 +1,4 @@ -.TH "brlapi_constants.h" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_constants.h" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_deprecated.3 b/Documents/BrlAPIref/man/man3/brlapi_deprecated.3 index 4bd7f673..8b11c49f 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_deprecated.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_deprecated.3 @@ -1,4 +1,4 @@ -.TH "Deprecated names" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Deprecated names" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_describedKeyCode_t.3 b/Documents/BrlAPIref/man/man3/brlapi_describedKeyCode_t.3 index fdba5378..e243c837 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_describedKeyCode_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_describedKeyCode_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_describedKeyCode_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_describedKeyCode_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_driverspecific.3 b/Documents/BrlAPIref/man/man3/brlapi_driverspecific.3 index 7b34c3da..2254e442 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_driverspecific.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_driverspecific.3 @@ -1,4 +1,4 @@ -.TH "Driver-Specific modes" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Driver-Specific modes" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_error.3 b/Documents/BrlAPIref/man/man3/brlapi_error.3 index 599b7303..05ef75f2 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_error.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_error.3 @@ -1,4 +1,4 @@ -.TH "Error handling" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Error handling" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_errorPacket_t.3 b/Documents/BrlAPIref/man/man3/brlapi_errorPacket_t.3 index 76ea9293..eb3a5c60 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_errorPacket_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_errorPacket_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_errorPacket_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_errorPacket_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_error_t.3 b/Documents/BrlAPIref/man/man3/brlapi_error_t.3 index f83a9b48..c42fa557 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_error_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_error_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_error_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_error_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_expandedKeyCode_t.3 b/Documents/BrlAPIref/man/man3/brlapi_expandedKeyCode_t.3 index 37e438b4..5b1e3308 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_expandedKeyCode_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_expandedKeyCode_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_expandedKeyCode_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_expandedKeyCode_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_getDriverSpecificModePacket_t.3 b/Documents/BrlAPIref/man/man3/brlapi_getDriverSpecificModePacket_t.3 index 69b40429..31190e4a 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_getDriverSpecificModePacket_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_getDriverSpecificModePacket_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_getDriverSpecificModePacket_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_getDriverSpecificModePacket_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_getModelIdentifier.3 b/Documents/BrlAPIref/man/man3/brlapi_getModelIdentifier.3 new file mode 100644 index 00000000..5dcc6624 --- /dev/null +++ b/Documents/BrlAPIref/man/man3/brlapi_getModelIdentifier.3 @@ -0,0 +1 @@ +.so man3/brlapi_info.3 diff --git a/Documents/BrlAPIref/man/man3/brlapi_handles.3 b/Documents/BrlAPIref/man/man3/brlapi_handles.3 index 31acad82..24c23dfa 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_handles.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_handles.3 @@ -1,4 +1,4 @@ -.TH "BrlAPI handles" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "BrlAPI handles" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_header_t.3 b/Documents/BrlAPIref/man/man3/brlapi_header_t.3 index 8871c144..16360715 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_header_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_header_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_header_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_header_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_info.3 b/Documents/BrlAPIref/man/man3/brlapi_info.3 index f495c99d..42fbe011 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_info.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_info.3 @@ -1,4 +1,4 @@ -.TH "Getting Terminal information" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Getting Terminal information" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -23,6 +23,12 @@ How to get information about the connected Terminal\&. .RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__getDriverName\fP (\fBbrlapi_handle_t\fP *handle, char *buffer, size_t size)" .br .ti -1c +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_getModelIdentifier\fP (char *buffer, size_t size)" +.br +.ti -1c +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__getModelIdentifier\fP (\fBbrlapi_handle_t\fP *handle, char *buffer, size_t size)" +.br +.ti -1c .RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_getDisplaySize\fP (unsigned int *x, unsigned int *y)" .br .ti -1c @@ -44,23 +50,43 @@ Maximum name length for names embeded in BrlAPI packets, not counting any termin .SS "int \fBBRLAPI_STDCALL\fP brlapi__getDriverName (\fBbrlapi_handle_t\fP *handle, char *buffer, size_tsize)" +.SS "int \fBBRLAPI_STDCALL\fP brlapi__getModelIdentifier (\fBbrlapi_handle_t\fP *handle, char *buffer, size_tsize)" + .SS "int \fBBRLAPI_STDCALL\fP brlapi_getDisplaySize (unsigned int *x, unsigned int *y)" Return the size of the braille display .SS "int \fBBRLAPI_STDCALL\fP brlapi_getDriverName (char *buffer, size_tsize)" Return the complete name of the driver used by \fIbrltty\fP .PP -This function fills its argument with the whole name of the braille terminal if available, terminated with a '\\0'\&. +This function fills its argument with the whole name of the braille driver if available, terminated with a '\\0'\&. .PP \fBParameters:\fP .RS 4 -\fIbuffer\fP is the buffer given by the application; +\fIbuffer\fP is the buffer provided by the application; .br \fIsize\fP is the maximum size for the name buffer\&. .RE .PP \fBReturns:\fP .RS 4 --1 on error, or a positive value giving the size of the needed buffer, if the supplied one is to small (same as snprintf())\&. +-1 on error, or a positive value giving the size of the needed buffer, if the supplied one is too small (same as snprintf())\&. +.RE +.PP + +.SS "int \fBBRLAPI_STDCALL\fP brlapi_getModelIdentifier (char *buffer, size_tsize)" +Return an identifier for the device model used by \fIbrltty\fP +.PP +This function fills its argument with the whole identifier of the braille device model if available, terminated with a '\\0'\&. +.PP +\fBParameters:\fP +.RS 4 +\fIbuffer\fP is the buffer given by the application; +.br +\fIsize\fP is the maximum size for the identifier buffer\&. +.RE +.PP +\fBReturns:\fP +.RS 4 +-1 on error, or a positive value giving the size of the needed buffer, if the supplied one is too small (same as snprintf())\&. .RE .PP diff --git a/Documents/BrlAPIref/man/man3/brlapi_keycodes.3 b/Documents/BrlAPIref/man/man3/brlapi_keycodes.3 index 4ed3911c..94f8bcc0 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_keycodes.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_keycodes.3 @@ -1,4 +1,4 @@ -.TH "Types and Defines fore BrlAPI Key Codes" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Types and Defines fore BrlAPI Key Codes" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_keycodes.h.3 b/Documents/BrlAPIref/man/man3/brlapi_keycodes.h.3 index 0d097439..5ee555b7 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_keycodes.h.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_keycodes.h.3 @@ -1,4 +1,4 @@ -.TH "brlapi_keycodes.h" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_keycodes.h" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_keys.3 b/Documents/BrlAPIref/man/man3/brlapi_keys.3 index 811cda11..9c536660 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_keys.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_keys.3 @@ -1,4 +1,4 @@ -.TH "Reading key presses" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Reading key presses" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -79,16 +79,16 @@ How to read key presses from the braille terminal\&. .RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__acceptAllKeys\fP (\fBbrlapi_handle_t\fP *handle)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_ignoreKeyRanges\fP (\fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_ignoreKeyRanges\fP (const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__ignoreKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__ignoreKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_acceptKeyRanges\fP (\fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi_acceptKeyRanges\fP (const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .ti -1c -.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__acceptKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_range_t\fP ranges[], unsigned int count)" +.RI "int \fBBRLAPI_STDCALL\fP \fBbrlapi__acceptKeyRanges\fP (\fBbrlapi_handle_t\fP *handle, const \fBbrlapi_range_t\fP ranges[], unsigned int count)" .br .in -1c .SH "Detailed Description" @@ -140,19 +140,19 @@ a given key code .PP .SS "int \fBBRLAPI_STDCALL\fP brlapi__acceptAllKeys (\fBbrlapi_handle_t\fP *handle)" -.SS "int \fBBRLAPI_STDCALL\fP brlapi__acceptKeyRanges (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_range_t\fPranges[], unsigned intcount)" +.SS "int \fBBRLAPI_STDCALL\fP brlapi__acceptKeyRanges (\fBbrlapi_handle_t\fP *handle, const \fBbrlapi_range_t\fPranges[], unsigned intcount)" .SS "int \fBBRLAPI_STDCALL\fP brlapi__acceptKeys (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_rangeType_t\fPtype, const \fBbrlapi_keyCode_t\fPkeys[], unsigned intcount)" .SS "int \fBBRLAPI_STDCALL\fP brlapi__ignoreAllKeys (\fBbrlapi_handle_t\fP *handle)" -.SS "int \fBBRLAPI_STDCALL\fP brlapi__ignoreKeyRanges (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_range_t\fPranges[], unsigned intcount)" +.SS "int \fBBRLAPI_STDCALL\fP brlapi__ignoreKeyRanges (\fBbrlapi_handle_t\fP *handle, const \fBbrlapi_range_t\fPranges[], unsigned intcount)" .SS "int \fBBRLAPI_STDCALL\fP brlapi__ignoreKeys (\fBbrlapi_handle_t\fP *handle, \fBbrlapi_rangeType_t\fPtype, const \fBbrlapi_keyCode_t\fPkeys[], unsigned intcount)" .SS "int \fBBRLAPI_STDCALL\fP brlapi__readKey (\fBbrlapi_handle_t\fP *handle, intwait, \fBbrlapi_keyCode_t\fP *code)" -.SS "int \fBBRLAPI_STDCALL\fP brlapi_acceptKeyRanges (\fBbrlapi_range_t\fPranges[], unsigned intcount)" +.SS "int \fBBRLAPI_STDCALL\fP brlapi_acceptKeyRanges (const \fBbrlapi_range_t\fPranges[], unsigned intcount)" Accept some key presses from the braille keyboard .PP This function asks the server to return the provided key ranges (inclusive) to the application, and not give them to \fIbrltty\fP\&. @@ -222,7 +222,7 @@ Expand the components of a key code .RE .PP -.SS "int \fBBRLAPI_STDCALL\fP brlapi_ignoreKeyRanges (\fBbrlapi_range_t\fPranges[], unsigned intcount)" +.SS "int \fBBRLAPI_STDCALL\fP brlapi_ignoreKeyRanges (const \fBbrlapi_range_t\fPranges[], unsigned intcount)" Ignore some key presses from the braille keyboard .PP This function asks the server to give the provided key ranges to \fIbrltty\fP, rather than returning them to the application via \fBbrlapi_readKey()\fP\&. diff --git a/Documents/BrlAPIref/man/man3/brlapi_packet_t.3 b/Documents/BrlAPIref/man/man3/brlapi_packet_t.3 index aecb2859..aac79ada 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_packet_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_packet_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_packet_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_packet_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_protocol.3 b/Documents/BrlAPIref/man/man3/brlapi_protocol.3 index 68a813dd..a5e50887 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_protocol.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_protocol.3 @@ -1,4 +1,4 @@ -.TH "BrlAPI's protocol" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "BrlAPI's protocol" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -53,6 +53,9 @@ Instructions and constants for \fIBrlAPI\fP 's protocol\&. .RI "#define \fBBRLAPI_PACKET_GETDRIVERNAME\fP 'n'" .br .ti -1c +.RI "#define \fBBRLAPI_PACKET_GETMODELID\fP 'd'" +.br +.ti -1c .RI "#define \fBBRLAPI_PACKET_GETDISPLAYSIZE\fP 's'" .br .ti -1c @@ -195,6 +198,8 @@ Exception Dimensions of brl display .SS "#define BRLAPI_PACKET_GETDRIVERNAME 'n'" Ask which driver is used +.SS "#define BRLAPI_PACKET_GETMODELID 'd'" +Ask which model is used .SS "#define BRLAPI_PACKET_IGNOREKEYRANGES 'm'" Mask key ranges .SS "#define BRLAPI_PACKET_KEY 'k'" @@ -335,8 +340,6 @@ In order to regulate concurrent access to the library's file descriptor and requ .IP "\(bu" 2 \fBbrlapi_recvRaw()\fP .IP "\(bu" 2 -brlapi_getDriverId() -.IP "\(bu" 2 \fBbrlapi_getDriverName()\fP .IP "\(bu" 2 \fBbrlapi_getDisplaySize()\fP diff --git a/Documents/BrlAPIref/man/man3/brlapi_protocol.h.3 b/Documents/BrlAPIref/man/man3/brlapi_protocol.h.3 index a2fcd52a..18a54069 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_protocol.h.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_protocol.h.3 @@ -1,4 +1,4 @@ -.TH "brlapi_protocol.h" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_protocol.h" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -68,6 +68,9 @@ types and constants for \fIBrlAPI's\fP protocol .RI "#define \fBBRLAPI_PACKET_GETDRIVERNAME\fP 'n'" .br .ti -1c +.RI "#define \fBBRLAPI_PACKET_GETMODELID\fP 'd'" +.br +.ti -1c .RI "#define \fBBRLAPI_PACKET_GETDISPLAYSIZE\fP 's'" .br .ti -1c diff --git a/Documents/BrlAPIref/man/man3/brlapi_range_t.3 b/Documents/BrlAPIref/man/man3/brlapi_range_t.3 index 0e348211..11979f8f 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_range_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_range_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_range_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_range_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_tty.3 b/Documents/BrlAPIref/man/man3/brlapi_tty.3 index 24aff6a8..6bb51e85 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_tty.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_tty.3 @@ -1,4 +1,4 @@ -.TH "Entering & leaving tty mode" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Entering & leaving tty mode" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_version.3 b/Documents/BrlAPIref/man/man3/brlapi_version.3 index d60a30fa..59fcd368 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_version.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_version.3 @@ -1,4 +1,4 @@ -.TH "Version of the BrlAPI library" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Version of the BrlAPI library" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -7,7 +7,7 @@ Version of the BrlAPI library \- .in +1c .ti -1c -.RI "#define \fBBRLAPI_RELEASE\fP '0\&.6\&.6'" +.RI "#define \fBBRLAPI_RELEASE\fP '0\&.6\&.7'" .br .ti -1c .RI "#define \fBBRLAPI_MAJOR\fP 0" @@ -16,7 +16,7 @@ Version of the BrlAPI library \- .RI "#define \fBBRLAPI_MINOR\fP 6" .br .ti -1c -.RI "#define \fBBRLAPI_REVISION\fP 6" +.RI "#define \fBBRLAPI_REVISION\fP 7" .br .in -1c .SH "Detailed Description" @@ -28,9 +28,9 @@ Version of the BrlAPI library \- Library major version\&. .SS "#define BRLAPI_MINOR 6" Library minor version\&. -.SS "#define BRLAPI_RELEASE '0\&.6\&.6'" +.SS "#define BRLAPI_RELEASE '0\&.6\&.7'" Library version\&. -.SS "#define BRLAPI_REVISION 6" +.SS "#define BRLAPI_REVISION 7" Library revision\&. .SH "Author" .PP diff --git a/Documents/BrlAPIref/man/man3/brlapi_versionPacket_t.3 b/Documents/BrlAPIref/man/man3/brlapi_versionPacket_t.3 index 2b9e6a04..a1e61a36 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_versionPacket_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_versionPacket_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_versionPacket_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_versionPacket_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_write.3 b/Documents/BrlAPIref/man/man3/brlapi_write.3 index 4607fc67..3f03f904 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_write.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_write.3 @@ -1,4 +1,4 @@ -.TH "Writing on the braille display" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "Writing on the braille display" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME @@ -170,7 +170,7 @@ Write the given dots array to the display .SS "int \fBBRLAPI_STDCALL\fP brlapi_writeText (intcursor, const char *text)" Write the given \\0-terminated string to the braille display .PP -If the string is too long, it is truncated\&. If it's too short, it is padded with spaces\&. The text is assumed to be in the current locale charset, or latin1 if locales have not been initialized\&. To initialize locales, use setlocale(3)\&. +If the string is too long, it is truncated\&. If it's too short, it is padded with spaces\&. The text is assumed to be in the current locale charset set by setlocale(3) if it was called, or the locale charset from the locale environment variables if setlocale(3) was not called\&. .PP \fBParameters:\fP .RS 4 diff --git a/Documents/BrlAPIref/man/man3/brlapi_writeArgumentsPacket_t.3 b/Documents/BrlAPIref/man/man3/brlapi_writeArgumentsPacket_t.3 index 3c700b37..9501a13d 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_writeArgumentsPacket_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_writeArgumentsPacket_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_writeArgumentsPacket_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_writeArgumentsPacket_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_writeArguments_t.3 b/Documents/BrlAPIref/man/man3/brlapi_writeArguments_t.3 index da01c4d1..608fbc0e 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_writeArguments_t.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_writeArguments_t.3 @@ -1,4 +1,4 @@ -.TH "brlapi_writeArguments_t" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_writeArguments_t" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/BrlAPIref/man/man3/brlapi_writeStruct.3 b/Documents/BrlAPIref/man/man3/brlapi_writeStruct.3 index 916ca782..1b2c249b 100644 --- a/Documents/BrlAPIref/man/man3/brlapi_writeStruct.3 +++ b/Documents/BrlAPIref/man/man3/brlapi_writeStruct.3 @@ -1,4 +1,4 @@ -.TH "brlapi_writeStruct" 3 "Tue Apr 18 2017" "Version 0.6" "BrlAPI" \" -*- nroff -*- +.TH "brlapi_writeStruct" 3 "Mon Feb 5 2018" "Version 0.6" "BrlAPI" \" -*- nroff -*- .ad l .nh .SH NAME diff --git a/Documents/CONTRIBUTORS b/Documents/CONTRIBUTORS index 001a4d3f..5a3af85b 100644 --- a/Documents/CONTRIBUTORS +++ b/Documents/CONTRIBUTORS @@ -1,13 +1,15 @@ -Alan Coopersmith Adi Dascal Adi Kushnir +Alan Coopersmith Alex Bernier Andreas Gross Angela Engel +Arthur Breuneval Attila Hammer August Hörandl Boris Daix Cheryl Homiak +Chris Brannon Christian Comaschi Christoph-Simon Senjak Coscell Kao @@ -29,6 +31,7 @@ Jean-Philippe Mengual Joanmarie Diggs John J. Boyer Jozko Gregorc +Julian Sackmann Kazunori Minatani <99112004@gakushuin.ac.jp> Keith Wessel Lars Bjørndal @@ -44,15 +47,17 @@ Mike Gorse Mike Pedersen Nicolas Pitre Nikita Tseykovets +Ole Guldberg Olivier Bert Ollie Mallard Oscar Fernandez Pete De Vasto Peter Lundblad Petr Řehák +Raoul Megelas Regiane Mendonça Villela Rich Burridge -Raoul Megelas +Rimas Kudelis Rudolf Weeber Samuel Thibault Samuel Yang @@ -74,6 +79,8 @@ Tomoyuki Kudou Tony Hernandez Ulf Beckmann Victor Montalvao +Victor Tsaran +Vipul Kute Willi Lutzenberger William Hubbs Wolfgang Astleitner diff --git a/Documents/ChangeLog b/Documents/ChangeLog index b76641bf..a20c07f6 100644 --- a/Documents/ChangeLog +++ b/Documents/ChangeLog @@ -1,6 +1,55 @@ Note: this file is in reversed chronological order (bottom to top). +February 5, 2018: + - BRLTTY 5.6 released: + General updates: + BRLTTY has been relicensed to the LGPL (from the GPL). + Better cursor routing handling of status line updates and vertical scrolling. + The Track Screen Scroll setting has been added. + The Word Wrap setting has been added. + Panning left when using a contraction table now word wraps. + Typing dismisses an alert message. + The test for when INFO does text maximization instead has been fixed. + Overrides are now applied when the preferences haven't yet been saved. + The Inceptor braille driver (from Innovision) has been added. + The Baum braille driver: + On models with B9 and B10 by the joystick, both are interpreted as Space. + Input packet handling for Pronto! V3 models has been fixed. + The EuroBraille braille driver: + Improved autodetection when using Bluetooth. + The Esytime braille keyboard can be used over Bluetooth and USB. + For Esytime models, B5 has been renamed to B8. + The HIMS braille driver: + The Smart Beetle is now recognized when using Bluetooth. + The HumanWare braille driver: + The BrailleNote Touch is recognized when using USB. + BrlAPI changes: + The version is now 0.6.7 (it was 0.6.6). + The brlapi_getModelIdentifier() function has been added to the API. + The default character set is now based on the user's locale. + Sessions would occasionally hang when connecting. + PolKit authentication is no longer attempted when it isn't available. + Reading raw key codes no longer uses key ranges. + Text tables: + The lt (Lithuanian) table has been updated. + The uk (Ukrainian) table has been added. + Contraction tables: + The fr-abrege (French) table has been updated. + The lt (Lithuanian) table has been added. + Support has been added for LibLouis tables. + brltty-ctb's output is now UTF-8 (rather than ASCII). + Key tables: + The ifPlatform and ifNotPlatform directives have been added. + Systemd changes: + Path (rather than target) units are now used to manage BRLTTY instances. + Android changes: + Danish translations have been added. + Build features: + Add the reload target to the make files for Systemd and Udev. + A make file for install/uninstall of the AppStream rules has been added. + Python 3.6 is supported. + April 18, 2017: - BRLTTY 5.5 released: General changes: diff --git a/Documents/Makefile.in b/Documents/Makefile.in index 91c18663..341ee07d 100644 --- a/Documents/Makefile.in +++ b/Documents/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Documents/Manual-BRLTTY/English/BRLTTY-1.html b/Documents/Manual-BRLTTY/English/BRLTTY-1.html index e9eae259..21519c81 100644 --- a/Documents/Manual-BRLTTY/English/BRLTTY-1.html +++ b/Documents/Manual-BRLTTY/English/BRLTTY-1.html @@ -21,12 +21,12 @@ Previous

    This program is free software. You may redistribute it and/or modify it under the terms of -The GNU General Public License +The GNU Lesser General Public License as published by The Free Software Foundation. -Version 2 (or any later version) of the license may be used.

    +Version 2.1 (or any later version) of the license may be used.

    You should have received a copy of the license along with this program. -It should be in the file LICENSE-GPL in the top-level directory. +It should be in the file LICENSE-LGPL in the top-level directory. If not, write to the Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    diff --git a/Documents/Manual-BRLTTY/English/BRLTTY-10.html b/Documents/Manual-BRLTTY/English/BRLTTY-10.html index 34add61a..9ab0f20b 100644 --- a/Documents/Manual-BRLTTY/English/BRLTTY-10.html +++ b/Documents/Manual-BRLTTY/English/BRLTTY-10.html @@ -40,6 +40,7 @@ hd
    cursorgives the cursor position; if equal to BRLAPI_CURSOR_OFF, no cursor is shown at all; if cursor==BRLAPI_CURSOR_LEAVE, the cursor is left where it is
    Hedo
    hmHIMS
    htHandyTech
    hwHumanWare
    +icInceptor
    irIris
    lbLibbraille
    ltLogText
    diff --git a/Documents/Manual-BRLTTY/English/BRLTTY-6.html b/Documents/Manual-BRLTTY/English/BRLTTY-6.html index a5695e94..470b9ad5 100644 --- a/Documents/Manual-BRLTTY/English/BRLTTY-6.html +++ b/Documents/Manual-BRLTTY/English/BRLTTY-6.html @@ -118,6 +118,7 @@ swSwahili
    taTamil
    teTelugu
    trTurkish
    +ukUkrainian
    viVietnamese

    @@ -522,6 +523,7 @@ jaJapanese (uncontracted) ko-g1Korean (grade 1) ko-g2Korean (grade 2) koKorean (uncontracted) +ltLituanian mgMalagasy (contracted) munMunda (contracted) nlDutch (contracted) diff --git a/Documents/Manual-BRLTTY/English/BRLTTY-8.html b/Documents/Manual-BRLTTY/English/BRLTTY-8.html index f58573e1..53cec841 100644 --- a/Documents/Manual-BRLTTY/English/BRLTTY-8.html +++ b/Documents/Manual-BRLTTY/English/BRLTTY-8.html @@ -85,7 +85,10 @@ HIMSBraille Sense SyncBraille Braille Edge Smart Beetle -HumanWareBrailliant 32/40/80 bi +HumanWareBrailliant BI 14/32/40 +Brailliant B 80 +BrailleNote Touch +InceptorBrailleMe Iris Libbraille LogText32 diff --git a/Documents/Manual-BRLTTY/English/BRLTTY.html b/Documents/Manual-BRLTTY/English/BRLTTY.html index b6a631f1..a169513e 100644 --- a/Documents/Manual-BRLTTY/English/BRLTTY.html +++ b/Documents/Manual-BRLTTY/English/BRLTTY.html @@ -28,10 +28,10 @@ Contents

    Dave Mielke <dave@mielke.cc> -

    Version 5.5, April 2017 + Version 5.6, February 2018
    - Copyright © 1995-2017 by The BRLTTY Developers. + Copyright © 1995-2018 by The BRLTTY Developers. BRLTTY is free software, and comes with ABSOLUTELY NO WARRANTY. It is placed under the terms of version 2 or later of diff --git a/Documents/Manual-BRLTTY/English/BRLTTY.sgml b/Documents/Manual-BRLTTY/English/BRLTTY.sgml index 4e6487ad..25c7dde2 100644 --- a/Documents/Manual-BRLTTY/English/BRLTTY.sgml +++ b/Documents/Manual-BRLTTY/English/BRLTTY.sgml @@ -20,9 +20,9 @@ Stphane Doyon Dave Mielke - Version 5.5, April 2017 + Version 5.6, February 2018 - Copyright © 1995-2017 by The BRLTTY Developers. + Copyright © 1995-2018 by The BRLTTY Developers. BRLTTY is free software, and comes with ABSOLUTELY NO WARRANTY. It is placed under the terms of version 2 or later of @@ -41,12 +41,12 @@ License

    This program is free software. You may redistribute it and/or modify it under the terms of - + as published by . -Version 2 (or any later version) of the license may be used. +Version 2.1 (or any later version) of the license may be used. You should have received a copy of the license along with this program. -It should be in the file - Version 5.5, April 2017 + Version 5.6, February 2018 - Copyright 1995-2017 by The BRLTTY Developers. BRLTTY is free soft- + Copyright 1995-2018 by The BRLTTY Developers. BRLTTY is free soft- ware, and comes with ABSOLUTELY NO WARRANTY. It is placed under the terms of version 2 or later of The GNU General Public License as pub- lished by The Free Software Foundation. @@ -145,12 +145,12 @@ 1.1. License This program is free software. You may redistribute it and/or modify - it under the terms of The GNU General Public License as published by - The Free Software Foundation. Version 2 (or any later version) of the - license may be used. + it under the terms of The GNU Lesser General Public License as + published by The Free Software Foundation. Version 2.1 (or any later + version) of the license may be used. You should have received a copy of the license along with this - program. It should be in the file LICENSE-GPL in the top-level + program. It should be in the file LICENSE-LGPL in the top-level directory. If not, write to the Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @@ -4331,6 +4331,7 @@ ta Tamil te Telugu tr Turkish + uk Ukrainian vi Vietnamese @@ -4711,6 +4712,7 @@ ko-g1 Korean (grade 1) ko-g2 Korean (grade 2) ko Korean (uncontracted) + lt Lituanian mg Malagasy (contracted) mun Munda (contracted) nl Dutch (contracted) @@ -5757,7 +5759,10 @@ SyncBraille Braille Edge Smart Beetle - HumanWare Brailliant 32/40/80 bi + HumanWare Brailliant BI 14/32/40 + Brailliant B 80 + BrailleNote Touch + Inceptor BrailleMe Iris Libbraille LogText 32 @@ -5851,6 +5856,7 @@ hm HIMS ht HandyTech hw HumanWare + ic Inceptor ir Iris lb Libbraille lt LogText diff --git a/Documents/Manual-BRLTTY/English/Makefile.in b/Documents/Manual-BRLTTY/English/Makefile.in index eb7f8846..0a39ca71 100644 --- a/Documents/Manual-BRLTTY/English/Makefile.in +++ b/Documents/Manual-BRLTTY/English/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Documents/Manual-BRLTTY/English/braille-drivers.sgml b/Documents/Manual-BRLTTY/English/braille-drivers.sgml index 590fb0ab..57a837a0 100644 --- a/Documents/Manual-BRLTTY/English/braille-drivers.sgml +++ b/Documents/Manual-BRLTTY/English/braille-drivers.sgml @@ -81,7 +81,11 @@ HIMS |Braille Edge@ |Smart Beetle@ HumanWare - |Brailliant 32/40/80 bi@ + |Brailliant BI 14/32/40@ + |Brailliant B 80@ + |BrailleNote Touch@ +Inceptor + |BrailleMe@ Iris@ Libbraille@ LogText diff --git a/Documents/Manual-BRLTTY/English/contraction-tables.sgml b/Documents/Manual-BRLTTY/English/contraction-tables.sgml index f02907a2..9cc08c9d 100644 --- a/Documents/Manual-BRLTTY/English/contraction-tables.sgml +++ b/Documents/Manual-BRLTTY/English/contraction-tables.sgml @@ -14,6 +14,7 @@ ja|Japanese (uncontracted)@ ko-g1|Korean (grade 1)@ ko-g2|Korean (grade 2)@ ko|Korean (uncontracted)@ +lt|Lituanian@ mg|Malagasy (contracted)@ mun|Munda (contracted)@ nl|Dutch (contracted)@ diff --git a/Documents/Manual-BRLTTY/English/driver-codes.sgml b/Documents/Manual-BRLTTY/English/driver-codes.sgml index 770c45a7..09eae403 100644 --- a/Documents/Manual-BRLTTY/English/driver-codes.sgml +++ b/Documents/Manual-BRLTTY/English/driver-codes.sgml @@ -20,6 +20,7 @@ hd|Hedo@ hm|HIMS@ ht|HandyTech@ hw|HumanWare@ +ic|Inceptor@ ir|Iris@ lb|Libbraille@ lt|LogText@ diff --git a/Documents/Manual-BRLTTY/English/text-tables.sgml b/Documents/Manual-BRLTTY/English/text-tables.sgml index 0db84d85..d7e350bb 100644 --- a/Documents/Manual-BRLTTY/English/text-tables.sgml +++ b/Documents/Manual-BRLTTY/English/text-tables.sgml @@ -85,4 +85,5 @@ sw|Swahili@ ta|Tamil@ te|Telugu@ tr|Turkish@ +uk|Ukrainian@ vi|Vietnamese@ diff --git a/Documents/Manual-BRLTTY/French/BRLTTY-1.html b/Documents/Manual-BRLTTY/French/BRLTTY-1.html index a2a8b618..fb5b839a 100644 --- a/Documents/Manual-BRLTTY/French/BRLTTY-1.html +++ b/Documents/Manual-BRLTTY/French/BRLTTY-1.html @@ -21,11 +21,11 @@ Page pr

    Ce programme est un logiciel libre. Vous pouvez le redistribuer et/ou le modifier sous les termes de la -GNU General Public License +GNU Lesser General Public License stipule par la -Free Software Foundation. Vous pouvez utiliser une version 2 (ou suprieure) de la licence.

    +Free Software Foundation. Vous pouvez utiliser une version 2,1 (ou suprieure) de la licence.

    Vous devriez avoir reu une copie de la licence avec le -programme. Elle devrait tre dans le fichier LICENSE-GPL du +programme. Elle devrait tre dans le fichier LICENSE-LGPL du rpertoire principal. Si ce n'est pas le cas, crivez la Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    diff --git a/Documents/Manual-BRLTTY/French/BRLTTY-10.html b/Documents/Manual-BRLTTY/French/BRLTTY-10.html index 9dad0150..307da631 100644 --- a/Documents/Manual-BRLTTY/French/BRLTTY-10.html +++ b/Documents/Manual-BRLTTY/French/BRLTTY-10.html @@ -19,6 +19,7 @@
    CodeName
    alAlva
    +anAndroid
    atAlbatross
    baBrlAPI
    bcBrailComm
    @@ -39,11 +40,13 @@ hdHedo
    hmHIMS
    htHandyTech
    hwHumanWare
    +icInceptor
    irIris
    lbLibbraille
    ltLogText
    mbMultiBraille
    mdMDV
    +mmBrailleMemo
    mnMiniBraille
    mpMikropuhe
    mtMetec
    diff --git a/Documents/Manual-BRLTTY/French/BRLTTY-6.html b/Documents/Manual-BRLTTY/French/BRLTTY-6.html index 5049a2e6..8273ab76 100644 --- a/Documents/Manual-BRLTTY/French/BRLTTY-6.html +++ b/Documents/Manual-BRLTTY/French/BRLTTY-6.html @@ -97,7 +97,7 @@ nl_BEAutrichien (Belge)
    nl_NLAutrichien (Pays-Bas)
    noNorvgien
    no-genericNorvgien (avec le support des autres langues)
    -no-oubNorvgien (Offentlig Utvalg for Blindeskrift)
    +no-oupNorvgien (Offentlig Utvalg for punktskrift)
    nwcNewari (ancien)
    orOriya
    paPanjabi
    @@ -110,6 +110,7 @@ saSanscrit
    satSantali
    sdSindhi
    skSlovaque
    +slSlovne
    svSudois
    sv-1989Sudois (standard 1989)
    sv-1996Sudois (standard 1996)
    @@ -117,6 +118,7 @@ swSwahili
    taTamoul
    teTelugu
    trTurc
    +ukUkrainien
    viVietnamien

    @@ -505,6 +507,7 @@ jaJaponeais (d ko-g1Coren (1er degr) ko-g2Coren (2me degr) koCoren (dsabrg) +ltLituanien mgMalagasky (abrg) munMunda (abrg) nlAutrichien (abrg) diff --git a/Documents/Manual-BRLTTY/French/BRLTTY-8.html b/Documents/Manual-BRLTTY/French/BRLTTY-8.html index 963fda26..8d5a94cc 100644 --- a/Documents/Manual-BRLTTY/French/BRLTTY-8.html +++ b/Documents/Manual-BRLTTY/French/BRLTTY-8.html @@ -85,7 +85,10 @@ HIMSBraille Sense SyncBraille Braille Edge Smart Beetle -HumanWareBrailliant 32/40/80 bi +HumanWareBrailliant BI 14/32/40 +Brailliant B 80 +BrailleNote Touch +InceptorBrailleMe Iris Libbraille LogText32 diff --git a/Documents/Manual-BRLTTY/French/BRLTTY.html b/Documents/Manual-BRLTTY/French/BRLTTY.html index d687b207..982d166e 100644 --- a/Documents/Manual-BRLTTY/French/BRLTTY.html +++ b/Documents/Manual-BRLTTY/French/BRLTTY.html @@ -37,10 +37,10 @@ Table des mati pour Traduc.org - Version 5.5, Avril 2017 + Version 5.6, Fvrier 2018
    - Copyright © 1995-2017 by Les Dveloppeurs de BRLTTY. + Copyright © 1995-2018 by Les Dveloppeurs de BRLTTY. BRLTTY est un logiciel libre, et n'est fourni avec AUCUNE GARANTIE. Il est plac sous les termes de la version 2 ou ultrieure de la GNU General Public License publie par diff --git a/Documents/Manual-BRLTTY/French/BRLTTY.sgml b/Documents/Manual-BRLTTY/French/BRLTTY.sgml index 610ad7ab..5fa37167 100644 --- a/Documents/Manual-BRLTTY/French/BRLTTY.sgml +++ b/Documents/Manual-BRLTTY/French/BRLTTY.sgml @@ -44,9 +44,9 @@ pour - Version 5.5, Avril 2017 + Version 5.6, Fvrier 2018 - Copyright © 1995-2017 by Les Dveloppeurs de BRLTTY. + Copyright © 1995-2018 by Les Dveloppeurs de BRLTTY. BRLTTY est un logiciel libre, et n'est fourni avec AUCUNE GARANTIE. Il est plac sous les termes de la version 2 ou ultrieure de la GNU General Public License publie par @@ -62,11 +62,11 @@ Licence

    Ce programme est un logiciel libre. Vous pouvez le redistribuer et/ou -le modifier sous les termes de la -stipule par la . Vous pouvez utiliser une version 2 (ou suprieure) de la licence. +le modifier sous les termes de la +stipule par la . Vous pouvez utiliser une version 2,1 (ou suprieure) de la licence. Vous devriez avoir reu une copie de la licence avec le -programme. Elle devrait tre dans le fichier pour Traduc.org - Version 5.5, Avril 2017 + Version 5.6, Fvrier 2018 - Copyright 1995-2017 by Les Dveloppeurs de BRLTTY. BRLTTY est un + Copyright 1995-2018 by Les Dveloppeurs de BRLTTY. BRLTTY est un logiciel libre, et n'est fourni avec AUCUNE GARANTIE. Il est plac sous les termes de la version 2 ou ultrieure de la GNU General Public License publie par The Free Software Foundation. @@ -150,14 +150,14 @@ 1.1. Licence Ce programme est un logiciel libre. Vous pouvez le redistribuer et/ou - le modifier sous les termes de la GNU General Public License stipule - par la Free Software Foundation. Vous pouvez utiliser une version 2 - (ou suprieure) de la licence. + le modifier sous les termes de la GNU Lesser General Public License + stipule par la Free Software Foundation. Vous pouvez utiliser une + version 2,1 (ou suprieure) de la licence. Vous devriez avoir reu une copie de la licence avec le programme. - Elle devrait tre dans le fichier LICENSE-GPL du rpertoire principal. - Si ce n'est pas le cas, crivez la Free Software Foundation Inc., - 675 Mass Ave, Cambridge, MA 02139, USA. + Elle devrait tre dans le fichier LICENSE-LGPL du rpertoire + principal. Si ce n'est pas le cas, crivez la Free Software + Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 1.2. Mise en garde @@ -4669,7 +4669,7 @@ nl_NL Autrichien (Pays-Bas) no Norvgien no-generic Norvgien (avec le support des autres langues) - no-oub Norvgien (Offentlig Utvalg for Blindeskrift) + no-oup Norvgien (Offentlig Utvalg for punktskrift) nwc Newari (ancien) or Oriya pa Panjabi @@ -4682,6 +4682,7 @@ sat Santali sd Sindhi sk Slovaque + sl Slovne sv Sudois sv-1989 Sudois (standard 1989) sv-1996 Sudois (standard 1996) @@ -4689,6 +4690,7 @@ ta Tamoul te Telugu tr Turc + uk Ukrainien vi Vietnamien @@ -5083,6 +5085,7 @@ ko-g1 Coren (1er degr) ko-g2 Coren (2me degr) ko Coren (dsabrg) + lt Lituanien mg Malagasky (abrg) mun Munda (abrg) nl Autrichien (abrg) @@ -6199,7 +6202,10 @@ SyncBraille Braille Edge Smart Beetle - HumanWare Brailliant 32/40/80 bi + HumanWare Brailliant BI 14/32/40 + Brailliant B 80 + BrailleNote Touch + Inceptor BrailleMe Iris Libbraille LogText 32 @@ -6271,6 +6277,7 @@ Code Name ____________________________________________________ al Alva + an Android at Albatross ba BrlAPI bc BrailComm @@ -6291,11 +6298,13 @@ hm HIMS ht HandyTech hw HumanWare + ic Inceptor ir Iris lb Libbraille lt LogText mb MultiBraille md MDV + mm BrailleMemo mn MiniBraille mp Mikropuhe mt Metec diff --git a/Documents/Manual-BRLTTY/French/Makefile.in b/Documents/Manual-BRLTTY/French/Makefile.in index a3b0843a..a493cb0f 100644 --- a/Documents/Manual-BRLTTY/French/Makefile.in +++ b/Documents/Manual-BRLTTY/French/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Documents/Manual-BRLTTY/French/braille-drivers.sgml b/Documents/Manual-BRLTTY/French/braille-drivers.sgml index 590fb0ab..57a837a0 100644 --- a/Documents/Manual-BRLTTY/French/braille-drivers.sgml +++ b/Documents/Manual-BRLTTY/French/braille-drivers.sgml @@ -81,7 +81,11 @@ HIMS |Braille Edge@ |Smart Beetle@ HumanWare - |Brailliant 32/40/80 bi@ + |Brailliant BI 14/32/40@ + |Brailliant B 80@ + |BrailleNote Touch@ +Inceptor + |BrailleMe@ Iris@ Libbraille@ LogText diff --git a/Documents/Manual-BRLTTY/French/contraction-tables.sgml b/Documents/Manual-BRLTTY/French/contraction-tables.sgml index c321607b..a28c2ce8 100644 --- a/Documents/Manual-BRLTTY/French/contraction-tables.sgml +++ b/Documents/Manual-BRLTTY/French/contraction-tables.sgml @@ -14,6 +14,7 @@ ja|Japoneais (d ko-g1|Coren (1er degr)@ ko-g2|Coren (2me degr)@ ko|Coren (dsabrg)@ +lt|Lituanien@ mg|Malagasky (abrg)@ mun|Munda (abrg)@ nl|Autrichien (abrg)@ diff --git a/Documents/Manual-BRLTTY/French/driver-codes.sgml b/Documents/Manual-BRLTTY/French/driver-codes.sgml index 06478064..09eae403 100644 --- a/Documents/Manual-BRLTTY/French/driver-codes.sgml +++ b/Documents/Manual-BRLTTY/French/driver-codes.sgml @@ -1,4 +1,5 @@ al|Alva@ +an|Android@ at|Albatross@ ba|BrlAPI@ bc|BrailComm@ @@ -19,11 +20,13 @@ hd|Hedo@ hm|HIMS@ ht|HandyTech@ hw|HumanWare@ +ic|Inceptor@ ir|Iris@ lb|Libbraille@ lt|LogText@ mb|MultiBraille@ md|MDV@ +mm|BrailleMemo@ mn|MiniBraille@ mp|Mikropuhe@ mt|Metec@ diff --git a/Documents/Manual-BRLTTY/French/text-tables.sgml b/Documents/Manual-BRLTTY/French/text-tables.sgml index d25c0a9d..2a3e492d 100644 --- a/Documents/Manual-BRLTTY/French/text-tables.sgml +++ b/Documents/Manual-BRLTTY/French/text-tables.sgml @@ -64,7 +64,7 @@ nl_BE|Autrichien (Belge)@ nl_NL|Autrichien (Pays-Bas)@ no|Norvgien@ no-generic|Norvgien (avec le support des autres langues)@ -no-oub|Norvgien (Offentlig Utvalg for Blindeskrift)@ +no-oup|Norvgien (Offentlig Utvalg for punktskrift)@ nwc|Newari (ancien)@ or|Oriya@ pa|Panjabi@ @@ -77,6 +77,7 @@ sa|Sanscrit@ sat|Santali@ sd|Sindhi@ sk|Slovaque@ +sl|Slovne@ sv|Sudois@ sv-1989|Sudois (standard 1989)@ sv-1996|Sudois (standard 1996)@ @@ -84,4 +85,5 @@ sw|Swahili@ ta|Tamoul@ te|Telugu@ tr|Turc@ +uk|Ukrainien@ vi|Vietnamien@ diff --git a/Documents/Manual-BrlAPI/English/BrlAPI-7.html b/Documents/Manual-BrlAPI/English/BrlAPI-7.html index 0b2d828e..773c97df 100644 --- a/Documents/Manual-BrlAPI/English/BrlAPI-7.html +++ b/Documents/Manual-BrlAPI/English/BrlAPI-7.html @@ -102,7 +102,7 @@ client then doesn't need to send a BRLAPI_PACKET_AUTH packet.

  • normal mode: the client is authorized to use the server, but didn't ask for a tty or raw mode. The client can send either of these types of packet:
      -
    • BRLAPI_PACKET_GETDRIVERID, BRLAPI_PACKET_GETDRIVERNAME +
    • BRLAPI_PACKET_GETDRIVERNAME or BRLAPI_PACKET_GETDISPLAYSIZE to get pieces of information from the server,
    • BRLAPI_PACKET_ENTERTTYMODE to enter tty handling mode,
    • BRLAPI_PACKET_ENTERRAWMODE to enter raw mode,
    • @@ -121,7 +121,7 @@ normal mode,
    • BRLAPI_PACKET_IGNOREKEYRANGE and BRLAPI_PACKET_ACCEPTKEYRANGE to mask and unmask keys,
    • BRLAPI_PACKET_WRITE to display text on this tty,
    • BRLAPI_PACKET_ENTERRAWMODE to enter raw mode,
    • -
    • BRLAPI_PACKET_GETDRIVERID, BRLAPI_PACKET_GETDRIVERNAME +
    • BRLAPI_PACKET_GETDRIVERNAME or BRLAPI_PACKET_GETDISPLAYSIZE to get pieces of information from the server,
    @@ -188,16 +188,17 @@ the credentials sufficient.
  • Note: when the Operating system permits it, the server may use implicit credential check, and then advertise the none method.

    -

    BRLAPI_PACKET_GETDRIVERID (see brlapi_getDriverId())

    - -

    This should be sent by the client when it needs the 2-char identifier of -the current brltty driver. The returned string is \0 terminated.

    -

    BRLAPI_PACKET_GETDRIVERNAME (see brlapi_getDriverName())

    This should be sent by the client when it needs the full name of the current brltty driver. The returned string is \0 terminated.

    +

    BRLAPI_PACKET_GETMODELID (see brlapi_getModelIdentifier())

    + +

    This should be sent by the client when it needs to identify +which model of braille display is currently used by brltty. +The returned string is \0 terminated.

    +

    BRLAPI_PACKET_GETDISPLAYSIZE (see brlapi_getDisplaySize())

    This should be sent by the client when it needs to know the braille display diff --git a/Documents/Manual-BrlAPI/English/BrlAPI.sgml b/Documents/Manual-BrlAPI/English/BrlAPI.sgml index b0263287..31dc21b9 100644 --- a/Documents/Manual-BrlAPI/English/BrlAPI.sgml +++ b/Documents/Manual-BrlAPI/English/BrlAPI.sgml @@ -1297,7 +1297,7 @@ client then doesn't need to send a normal mode: the client is authorized to use the server, but didn't ask for a tty or raw mode. The client can send either of these types of packet: - And the server might send -This should be sent by the client when it needs the 2-char identifier of -the current This should be sent by the client when it needs the full name of the current +This should be sent by the client when it needs to identify +which model of braille display is currently used by This should be sent by the client when it needs to know the braille display diff --git a/Documents/Manual-BrlAPI/English/BrlAPI.txt b/Documents/Manual-BrlAPI/English/BrlAPI.txt index dea47467..4be8156f 100644 --- a/Documents/Manual-BrlAPI/English/BrlAPI.txt +++ b/Documents/Manual-BrlAPI/English/BrlAPI.txt @@ -71,8 +71,8 @@ BRLAPI_ERROR_PROTOCOL_VERSION error packet is returned and the connection is closed. 7.4.2 BRLAPI_PACKET_AUTH - 7.4.3 BRLAPI_PACKET_GETDRIVERID (see brlapi_getDriverId() ) - 7.4.4 BRLAPI_PACKET_GETDRIVERNAME (see brlapi_getDriverName() ) + 7.4.3 BRLAPI_PACKET_GETDRIVERNAME (see brlapi_getDriverName() ) + 7.4.4 BRLAPI_PACKET_GETMODELID (see brlapi_getModelIdentifier() ) 7.4.5 BRLAPI_PACKET_GETDISPLAYSIZE (see brlapi_getDisplaySize() ) 7.4.6 BRLAPI_PACKET_ENTERTTYMODE (see brlapi_enterTtyMode() and brlapi_enterTtyModeWithPath() ) @@ -1362,9 +1362,8 @@ ask for a tty or raw mode. The client can send either of these types of packet: - BRLAPI_PACKET_GETDRIVERID, BRLAPI_PACKET_GETDRIVERNAME or - BRLAPI_PACKET_GETDISPLAYSIZE to get pieces of information from - the server, + BRLAPI_PACKET_GETDRIVERNAME or BRLAPI_PACKET_GETDISPLAYSIZE to + get pieces of information from the server, BRLAPI_PACKET_ENTERTTYMODE to enter tty handling mode, @@ -1390,9 +1389,8 @@ BRLAPI_PACKET_ENTERRAWMODE to enter raw mode, - BRLAPI_PACKET_GETDRIVERID, BRLAPI_PACKET_GETDRIVERNAME or - BRLAPI_PACKET_GETDISPLAYSIZE to get pieces of information from - the server, + BRLAPI_PACKET_GETDRIVERNAME or BRLAPI_PACKET_GETDISPLAYSIZE to + get pieces of information from the server, And the server might send BRLAPI_PACKET_KEY packets to signal key presses. @@ -1468,16 +1466,17 @@ Note: when the Operating system permits it, the server may use implicit credential check, and then advertise the none method. - 7.4.3. BRLAPI_PACKET_GETDRIVERID (see brlapi_getDriverId() ) - - This should be sent by the client when it needs the 2-char identifier - of the current brltty driver. The returned string is \0 terminated. - - 7.4.4. BRLAPI_PACKET_GETDRIVERNAME (see brlapi_getDriverName() ) + 7.4.3. BRLAPI_PACKET_GETDRIVERNAME (see brlapi_getDriverName() ) This should be sent by the client when it needs the full name of the current brltty driver. The returned string is \0 terminated. + 7.4.4. BRLAPI_PACKET_GETMODELID (see brlapi_getModelIdentifier() ) + + This should be sent by the client when it needs to identify which + model of braille display is currently used by brltty. The returned + string is \0 terminated. + 7.4.5. BRLAPI_PACKET_GETDISPLAYSIZE (see brlapi_getDisplaySize() ) This should be sent by the client when it needs to know the braille diff --git a/Documents/Manual-BrlAPI/English/Makefile.in b/Documents/Manual-BrlAPI/English/Makefile.in index ef323086..29c464ec 100644 --- a/Documents/Manual-BrlAPI/English/Makefile.in +++ b/Documents/Manual-BrlAPI/English/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Documents/README.Systemd b/Documents/README.Systemd index 52421e52..27ed9dab 100644 --- a/Documents/README.Systemd +++ b/Documents/README.Systemd @@ -12,7 +12,7 @@ Using Systemd Service Management Initial Setup ============= -A set of Systemd service and target units needs to be installed +A set of Systemd service and path units needs to be installed into the |unit directory| directory, and a wrapper script needs to be installed into the |wrapper directory| directory. @@ -52,29 +52,29 @@ The Default Instance The default BRLTTY instance is the one that's configured via the file ``/etc/brltty.conf``. -It's managed by applying standard Systemd commands to BRLTTY's target unit. +It's managed by applying standard Systemd commands to BRLTTY's path unit. For example:: - systemctl enable brltty.target - systemctl start brltty.target - systemctl stop brltty.target - systemctl disable brltty.target + systemctl enable brltty.path + systemctl start brltty.path + systemctl stop brltty.path + systemctl disable brltty.path Additional Instances -------------------- -Additional BRLTTY instances can be managed via target instance references. +Additional BRLTTY instances can be managed via path instance references. Each of them has its own configuration file. If, for example, the name of an instance is ``iname``, then -its Systemd target name would be ``brltty@iname``, +its Systemd path name would be ``brltty@iname``, its configuration file would be ``/etc/brltty_iname.conf``, and it'd be managed via Systemd commands like these:: - systemctl enable brltty@iname.target - systemctl start brltty@iname.target - systemctl stop brltty@iname.target - systemctl disable brltty@iname.target + systemctl enable brltty@iname.path + systemctl start brltty@iname.path + systemctl stop brltty@iname.path + systemctl disable brltty@iname.path Any number of instances may be managed in this way. diff --git a/Documents/braille-driver.csv b/Documents/braille-driver.csv index 66e85be1..a8d15854 100644 --- a/Documents/braille-driver.csv +++ b/Documents/braille-driver.csv @@ -17,6 +17,7 @@ "hm","HIMS" "ht","HandyTech" "hw","HumanWare" +"ic","Inceptor" "ir","Iris" "lb","Libbraille" "lt","LogText" diff --git a/Documents/brltty.1.in b/Documents/brltty.1.in index 296f8b67..ab7b3c1d 100644 --- a/Documents/brltty.1.in +++ b/Documents/brltty.1.in @@ -3,20 +3,20 @@ .\" BRLTTY - A background process providing access to the console screen (when in .\" text mode) for a blind person using a refreshable braille display. .\" -.\" Copyright (C) 1995-2017 by The BRLTTY Developers. +.\" Copyright (C) 1995-2018 by The BRLTTY Developers. .\" .\" BRLTTY comes with ABSOLUTELY NO WARRANTY. .\" .\" This is free software, placed under the terms of the -.\" GNU General Public License, as published by the Free Software -.\" Foundation; either version 2 of the License, or (at your option) any -.\" later version. Please see the file LICENSE-GPL for details. +.\" GNU Lesser General Public License, as published by the Free Software +.\" Foundation; either version 2.1 of the License, or (at your option) any +.\" later version. Please see the file LICENSE-LGPL for details. .\" .\" Web Page: http://brltty.com/ .\" .\" This software is maintained by Dave Mielke . .\" -.TH "BRLTTY" "1" "2017-04-18" "brltty 5.5" "BRLTTY User's Manual" +.TH "BRLTTY" "1" "2018-02-01" "brltty 5.5" "BRLTTY User's Manual" .SH NAME brltty \- refreshable braille display driver for Linux/Unix .SH SYNOPSIS @@ -747,6 +747,9 @@ HumanWare .B ir Iris .TP 4 +.B ic +Inceptor +.TP 4 .B lb Libbraille .TP 4 diff --git a/Documents/brltty.conf.in b/Documents/brltty.conf.in index 0a9893b0..e1127367 100644 --- a/Documents/brltty.conf.in +++ b/Documents/brltty.conf.in @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -73,6 +73,7 @@ #braille-driver hm # HIMS #braille-driver ht # HandyTech #braille-driver hw # HumanWare +#braille-driver ic # Inceptor #braille-driver ir # Iris #braille-driver lb # Libbraille #braille-driver lt # LogText @@ -214,6 +215,7 @@ #text-table ta # Tamil #text-table te # Telugu #text-table tr # Turkish +#text-table uk # Ukrainian #text-table vi # Vietnamese # The attributes-table directive specifies which attributes table to use. @@ -244,6 +246,7 @@ #contraction-table ko-g1 # Korean (grade 1) #contraction-table ko-g2 # Korean (grade 2) #contraction-table ko # Korean (uncontracted) +#contraction-table lt # Lithuanian (uncontracted) #contraction-table mg # Malagasy (contracted) #contraction-table mun # Munda (contracted) #contraction-table nl # Dutch (contracted) diff --git a/Documents/contraction-table.csv b/Documents/contraction-table.csv index 23d496f6..65ed3ec8 100644 --- a/Documents/contraction-table.csv +++ b/Documents/contraction-table.csv @@ -5,6 +5,7 @@ "id","Indonesian (contracted)" "ja","Japanese (uncontracted)" "ko","Korean (uncontracted)" +"lt","Lithuanian (uncontracted)" "mg","Malagasy (contracted)" "mun","Munda (contracted)" "nl","Dutch (contracted)" diff --git a/Documents/mkcsvs b/Documents/mkcsvs index 1b63eb7e..0d44be2d 100755 --- a/Documents/mkcsvs +++ b/Documents/mkcsvs @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Documents/text-table.csv b/Documents/text-table.csv index 17df7691..e197bf9f 100644 --- a/Documents/text-table.csv +++ b/Documents/text-table.csv @@ -74,4 +74,5 @@ "ta","Tamil" "te","Telugu" "tr","Turkish" +"uk","Ukrainian" "vi","Vietnamese" diff --git a/Documents/xbrlapi.1 b/Documents/xbrlapi.1 index a2aac5b9..d10527b2 100644 --- a/Documents/xbrlapi.1 +++ b/Documents/xbrlapi.1 @@ -1,4 +1,4 @@ -.TH "XBRLAPI" "1" "2017-04-18" "BrlAPI 0.6.6" "BrlAPI User's Manual" +.TH "XBRLAPI" "1" "2018-02-01" "BrlAPI 0.6.7" "BrlAPI User's Manual" .SH NAME xbrlapi \- X11 BrlAPI helper for Linux/Unix .SH SYNOPSIS diff --git a/Drivers/Braille/Albatross/Makefile.in b/Drivers/Braille/Albatross/Makefile.in index 0ad95f83..47b329a9 100644 --- a/Drivers/Braille/Albatross/Makefile.in +++ b/Drivers/Braille/Albatross/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Albatross/braille.c b/Drivers/Braille/Albatross/braille.c index f9975392..ca2de015 100644 --- a/Drivers/Braille/Albatross/braille.c +++ b/Drivers/Braille/Albatross/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -439,12 +439,12 @@ refreshDisplay (BrailleDisplay *brl) { static int brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { - if (isSerialDevice(&device)) { + if (isSerialDeviceIdentifier(&device)) { io = &serialOperations; - } else if (isUsbDevice(&device)) { + } else if (isUsbDeviceIdentifier(&device)) { io = &usbOperations; } else { - unsupportedDevice(device); + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/Albatross/brldefs-at.h b/Drivers/Braille/Albatross/brldefs-at.h index d218b86c..ed808957 100644 --- a/Drivers/Braille/Albatross/brldefs-at.h +++ b/Drivers/Braille/Albatross/brldefs-at.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Alva/Makefile.in b/Drivers/Braille/Alva/Makefile.in index 247699d7..cbe3a3cd 100644 --- a/Drivers/Braille/Alva/Makefile.in +++ b/Drivers/Braille/Alva/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Alva/braille.c b/Drivers/Braille/Alva/braille.c index a0bd30d4..3859391b 100644 --- a/Drivers/Braille/Alva/braille.c +++ b/Drivers/Braille/Alva/braille.c @@ -2,23 +2,23 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * * This software is maintained by Dave Mielke . */ -/* Alva/brlmain.cc - Braille display library for Alva braille displays +/* Alva/braille.cc - Braille display library for Alva braille displays * Copyright (C) 1995-2002 by Nicolas Pitre - * See the GNU Public license for details in the LICENSE-GPL file + * See the GNU Lesser General Public License for details in the LICENSE-LGPL file * */ diff --git a/Drivers/Braille/Alva/braille.h b/Drivers/Braille/Alva/braille.h index 8af1590b..fdbe5616 100644 --- a/Drivers/Braille/Alva/braille.h +++ b/Drivers/Braille/Alva/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Alva/brldefs-al.h b/Drivers/Braille/Alva/brldefs-al.h index a212473e..0f0c70d4 100644 --- a/Drivers/Braille/Alva/brldefs-al.h +++ b/Drivers/Braille/Alva/brldefs-al.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/B2G/Makefile.in b/Drivers/Braille/B2G/Makefile.in index 219d2bb6..854f3c4c 100644 --- a/Drivers/Braille/B2G/Makefile.in +++ b/Drivers/Braille/B2G/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://mielke.cc/brltty/ # diff --git a/Drivers/Braille/B2G/braille.c b/Drivers/Braille/B2G/braille.c index a7d05c79..33fb7ea7 100644 --- a/Drivers/Braille/B2G/braille.c +++ b/Drivers/Braille/B2G/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://mielke.cc/brltty/ * diff --git a/Drivers/Braille/B2G/brldefs-bg.h b/Drivers/Braille/B2G/brldefs-bg.h index 18d755c3..59341561 100644 --- a/Drivers/Braille/B2G/brldefs-bg.h +++ b/Drivers/Braille/B2G/brldefs-bg.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Baum/Makefile.in b/Drivers/Braille/Baum/Makefile.in index 91218058..76f13266 100644 --- a/Drivers/Braille/Baum/Makefile.in +++ b/Drivers/Braille/Baum/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Baum/braille.c b/Drivers/Braille/Baum/braille.c index 38e37575..f7df9697 100644 --- a/Drivers/Braille/Baum/braille.c +++ b/Drivers/Braille/Baum/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -3030,14 +3030,14 @@ connectResource (BrailleDisplay *brl, const char *identifier) { .vendor=0X0904, .product=0X4004, .configuration=1, .interface=0, .alternative=0, .inputEndpoint=1, .outputEndpoint=2, - .data=&baumHid2Operations + .data=&baumHid1Operations }, { /* Pronto! V3 40 (40 cells) */ .vendor=0X0904, .product=0X4005, .configuration=1, .interface=0, .alternative=0, .inputEndpoint=1, .outputEndpoint=2, - .data=&baumHid2Operations + .data=&baumHid1Operations }, { /* Pronto! V4 18 (18 cells) */ diff --git a/Drivers/Braille/Baum/brldefs-bm.h b/Drivers/Braille/Baum/brldefs-bm.h index d70c78c3..b0cd55de 100644 --- a/Drivers/Braille/Baum/brldefs-bm.h +++ b/Drivers/Braille/Baum/brldefs-bm.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/BrailComm/Makefile.in b/Drivers/Braille/BrailComm/Makefile.in index c3bfc544..ebcc28ab 100644 --- a/Drivers/Braille/BrailComm/Makefile.in +++ b/Drivers/Braille/BrailComm/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/BrailComm/braille.c b/Drivers/Braille/BrailComm/braille.c index 8c01c021..a3d3fff6 100644 --- a/Drivers/Braille/BrailComm/braille.c +++ b/Drivers/Braille/BrailComm/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -79,8 +79,8 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { serialBaud = baudTable[0]; } - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/BrailComm/brl-out.h b/Drivers/Braille/BrailComm/brl-out.h index 622bab91..93143912 100644 --- a/Drivers/Braille/BrailComm/brl-out.h +++ b/Drivers/Braille/BrailComm/brl-out.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/BrailleLite/Makefile.in b/Drivers/Braille/BrailleLite/Makefile.in index fec65a23..12343ed5 100644 --- a/Drivers/Braille/BrailleLite/Makefile.in +++ b/Drivers/Braille/BrailleLite/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/BrailleLite/bindings.h b/Drivers/Braille/BrailleLite/bindings.h index 98b20c76..ce182aaf 100644 --- a/Drivers/Braille/BrailleLite/bindings.h +++ b/Drivers/Braille/BrailleLite/bindings.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/BrailleLite/braille.c b/Drivers/Braille/BrailleLite/braille.c index 66ca3205..0b545ab9 100644 --- a/Drivers/Braille/BrailleLite/braille.c +++ b/Drivers/Braille/BrailleLite/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -294,8 +294,8 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) logMessage(LOG_WARNING, "%s: %s", "invalid keyboard emulation setting", parameters[PARM_KBEMU]); kbemu = !!kbemu; - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/BrailleLite/braille.h b/Drivers/Braille/BrailleLite/braille.h index fdb71ae9..8e291a7e 100644 --- a/Drivers/Braille/BrailleLite/braille.h +++ b/Drivers/Braille/BrailleLite/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/BrailleMemo/Makefile.in b/Drivers/Braille/BrailleMemo/Makefile.in index 2cf6d5a2..39014115 100644 --- a/Drivers/Braille/BrailleMemo/Makefile.in +++ b/Drivers/Braille/BrailleMemo/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/BrailleMemo/braille.c b/Drivers/Braille/BrailleMemo/braille.c index 35460526..034e7176 100644 --- a/Drivers/Braille/BrailleMemo/braille.c +++ b/Drivers/Braille/BrailleMemo/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/BrailleMemo/brldefs-mm.h b/Drivers/Braille/BrailleMemo/brldefs-mm.h index 5f5bcdf7..54e28da8 100644 --- a/Drivers/Braille/BrailleMemo/brldefs-mm.h +++ b/Drivers/Braille/BrailleMemo/brldefs-mm.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/BrailleNote/Makefile.in b/Drivers/Braille/BrailleNote/Makefile.in index 0e01d08c..086ae9d0 100644 --- a/Drivers/Braille/BrailleNote/Makefile.in +++ b/Drivers/Braille/BrailleNote/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/BrailleNote/braille.c b/Drivers/Braille/BrailleNote/braille.c index 39f72f0f..9b7251c6 100644 --- a/Drivers/Braille/BrailleNote/braille.c +++ b/Drivers/Braille/BrailleNote/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/BrailleNote/brldefs-bn.h b/Drivers/Braille/BrailleNote/brldefs-bn.h index 21042927..666eaed8 100644 --- a/Drivers/Braille/BrailleNote/brldefs-bn.h +++ b/Drivers/Braille/BrailleNote/brldefs-bn.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Braudi/Makefile.in b/Drivers/Braille/Braudi/Makefile.in index 040464f5..d6d038c5 100644 --- a/Drivers/Braille/Braudi/Makefile.in +++ b/Drivers/Braille/Braudi/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Braudi/braille.c b/Drivers/Braille/Braudi/braille.c index 565d9a7b..50cfecc2 100644 --- a/Drivers/Braille/Braudi/braille.c +++ b/Drivers/Braille/Braudi/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -171,8 +171,8 @@ setTable (BrailleDisplay *brl, int table) { static int brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/BrlAPI/Makefile.in b/Drivers/Braille/BrlAPI/Makefile.in index 1070003a..fc9cf00e 100644 --- a/Drivers/Braille/BrlAPI/Makefile.in +++ b/Drivers/Braille/BrlAPI/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/BrlAPI/braille.c b/Drivers/Braille/BrlAPI/braille.c index 1a9485ee..6c9d8420 100644 --- a/Drivers/Braille/BrlAPI/braille.c +++ b/Drivers/Braille/BrlAPI/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Cebra/Makefile.in b/Drivers/Braille/Cebra/Makefile.in index 1a7d0da1..c31963e0 100644 --- a/Drivers/Braille/Cebra/Makefile.in +++ b/Drivers/Braille/Cebra/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Cebra/braille.c b/Drivers/Braille/Cebra/braille.c index 22ce1489..aa4efe0c 100644 --- a/Drivers/Braille/Cebra/braille.c +++ b/Drivers/Braille/Cebra/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Cebra/brldefs-ce.h b/Drivers/Braille/Cebra/brldefs-ce.h index 122545bd..26a4f502 100644 --- a/Drivers/Braille/Cebra/brldefs-ce.h +++ b/Drivers/Braille/Cebra/brldefs-ce.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/CombiBraille/Makefile.in b/Drivers/Braille/CombiBraille/Makefile.in index 24a20e54..c9f672ba 100644 --- a/Drivers/Braille/CombiBraille/Makefile.in +++ b/Drivers/Braille/CombiBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/CombiBraille/README b/Drivers/Braille/CombiBraille/README index 41736f15..6dc77dba 100644 --- a/Drivers/Braille/CombiBraille/README +++ b/Drivers/Braille/CombiBraille/README @@ -3,8 +3,8 @@ Driver for Tieman B.V.'s CombiBraille series Copyright (C) 1995, 1996 by Nikhil Nair. This driver is part of BRLTTY, and as such it is placed under the -terms of the GNU General Public License, as published by the Free -Software Foundation. Please see the file LICENSE-GPL in the top-level +terms of the GNU Lesser General Public License, as published by the Free +Software Foundation. Please see the file LICENSE-LGPL in the top-level directory for details. This driver was maintained by Nikhil Nair . diff --git a/Drivers/Braille/CombiBraille/braille.c b/Drivers/Braille/CombiBraille/braille.c index bacbc577..8aac07cb 100644 --- a/Drivers/Braille/CombiBraille/braille.c +++ b/Drivers/Braille/CombiBraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -78,8 +78,8 @@ static unsigned char oldstatus[MAX_STATUS_CELLS]; static int brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/CombiBraille/braille.h b/Drivers/Braille/CombiBraille/braille.h index 8c00828d..52aa2c6c 100644 --- a/Drivers/Braille/CombiBraille/braille.h +++ b/Drivers/Braille/CombiBraille/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/CombiBraille/brldefs-cb.h b/Drivers/Braille/CombiBraille/brldefs-cb.h index 2e451217..ecba1e20 100644 --- a/Drivers/Braille/CombiBraille/brldefs-cb.h +++ b/Drivers/Braille/CombiBraille/brldefs-cb.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/EcoBraille/LEEME b/Drivers/Braille/EcoBraille/LEEME index d345f21c..41a7a6fe 100644 --- a/Drivers/Braille/EcoBraille/LEEME +++ b/Drivers/Braille/EcoBraille/LEEME @@ -6,8 +6,9 @@ Version 1.01 (1 de Marzo de 2000) Licencia ======== -Este driver tiene la licencia GNU publica. Este software es gratuito. -Lease el fichero 'LICENSE-GPL' para mas detalles de la licencia. +Este software es gratuito. +Este driver se distrbuye bajo la Licencia Pública General Reducida de GNU. +Lease el fichero 'LICENSE-LGPL' para mas detalles de la licencia. Mandeme sus comentarios o errores encontrados al e-mail ofa@once.es puede hacerlo en castellano, catalan o en ingles. diff --git a/Drivers/Braille/EcoBraille/Makefile.in b/Drivers/Braille/EcoBraille/Makefile.in index d602cb92..b6293d1a 100644 --- a/Drivers/Braille/EcoBraille/Makefile.in +++ b/Drivers/Braille/EcoBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/EcoBraille/README b/Drivers/Braille/EcoBraille/README index c24d7dcd..d9e94295 100644 --- a/Drivers/Braille/EcoBraille/README +++ b/Drivers/Braille/EcoBraille/README @@ -6,9 +6,9 @@ Version 1.01 (March 1, 2000) Copyright ========= -This driver is copyrighted under the GNU Public License. It is free -software. See the file 'LICENSE-GPL' for more details. Feel free to send -your comments and to report bugs to me at ofa@once.es +This driver is copyrighted under the GNU Lesser General Public License. +It is free software. See the file 'LICENSE-LGPL' for more details. +Feel free to send your comments and to report bugs to me at ofa@once.es Can you write me in Spanish, catalonian or english. diff --git a/Drivers/Braille/EcoBraille/braille.c b/Drivers/Braille/EcoBraille/braille.c index fc06bada..4b1f6bda 100644 --- a/Drivers/Braille/EcoBraille/braille.c +++ b/Drivers/Braille/EcoBraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -18,7 +18,7 @@ /* EcoBraille/braille.c - Braille display library for ECO Braille series * Copyright (C) 1999 by Oscar Fernandez - * See the GNU Public license for details in the LICENSE-GPL file + * See the GNU Lesser General Public license for details in the LICENSE-LGPL file * * For debuging define DEBUG variable */ @@ -151,8 +151,8 @@ static int brl_construct(BrailleDisplay *brl, char **parameters, const char *dev short ModelID = MODEL; unsigned char buffer[DIM_BRL_ID + 6]; - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/EcoBraille/braille.h b/Drivers/Braille/EcoBraille/braille.h index 54abf315..32792f1e 100644 --- a/Drivers/Braille/EcoBraille/braille.h +++ b/Drivers/Braille/EcoBraille/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/EuroBraille/Makefile.in b/Drivers/Braille/EuroBraille/Makefile.in index 0500aa70..fc606cbf 100644 --- a/Drivers/Braille/EuroBraille/Makefile.in +++ b/Drivers/Braille/EuroBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -28,7 +28,7 @@ SRC_FILES = eu_braille.c eu_clio.c eu_esysiris.c OBJ_FILES = $(SRC_FILES:.c=.$O) braille.$O: $(OBJ_FILES) - $(MKOBJ) $@ $(OBJ_FILES) + $(MKREL) $@ $(OBJ_FILES) %.$O: $(SRC_DIR)/%.c $(CC) $(BRL_CFLAGS) -o $@ -c $< diff --git a/Drivers/Braille/EuroBraille/README b/Drivers/Braille/EuroBraille/README index a90b5bd4..6a5ea6d7 100644 --- a/Drivers/Braille/EuroBraille/README +++ b/Drivers/Braille/EuroBraille/README @@ -2,8 +2,8 @@ This is the EuroBraille family driver for BRLTTY, version 2.0.0 Initial writing by Nicolas Pitre , Copyright 1997-1998. -This code is copyrighted under the GNU Public License. See the file -LICENSE-GPL included with BRLTTY for details. +This code is copyrighted under the GNU Lesser General Public License. +See the file LICENSE-LGPL included with BRLTTY for details. This driver is currently maintained by * Yannick Plassiard diff --git a/Drivers/Braille/EuroBraille/brldefs-eu.h b/Drivers/Braille/EuroBraille/brldefs-eu.h index eae7f96b..4a8e516d 100644 --- a/Drivers/Braille/EuroBraille/brldefs-eu.h +++ b/Drivers/Braille/EuroBraille/brldefs-eu.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/EuroBraille/eu_braille.c b/Drivers/Braille/EuroBraille/eu_braille.c index b0e2c256..8d4b9ff8 100644 --- a/Drivers/Braille/EuroBraille/eu_braille.c +++ b/Drivers/Braille/EuroBraille/eu_braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/EuroBraille/eu_clio.c b/Drivers/Braille/EuroBraille/eu_clio.c index fa9193db..a8038be7 100644 --- a/Drivers/Braille/EuroBraille/eu_clio.c +++ b/Drivers/Braille/EuroBraille/eu_clio.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/EuroBraille/eu_esysiris.c b/Drivers/Braille/EuroBraille/eu_esysiris.c index 5d8c627f..df210dbd 100644 --- a/Drivers/Braille/EuroBraille/eu_esysiris.c +++ b/Drivers/Braille/EuroBraille/eu_esysiris.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -31,6 +31,7 @@ #include "ascii.h" #include "brldefs-eu.h" #include "eu_protocol.h" +#include "eu_protocoldef.h" #define MAXIMUM_DISPLAY_SIZE 80 @@ -48,11 +49,6 @@ BEGIN_KEY_NAME_TABLE(linear) COMMAND_KEY_ENTRY(L8, "L8"), END_KEY_NAME_TABLE -BEGIN_KEY_NAME_TABLE(linear15) - COMMAND_KEY_ENTRY(L1, "L1"), - COMMAND_KEY_ENTRY(L5, "L5"), -END_KEY_NAME_TABLE - BEGIN_KEY_NAME_TABLE(arrow) COMMAND_KEY_ENTRY(Left, "Left"), COMMAND_KEY_ENTRY(Right, "Right"), @@ -167,7 +163,8 @@ END_KEY_NAME_TABLES BEGIN_KEY_NAME_TABLES(esytime) KEY_NAME_TABLE(joystick1), KEY_NAME_TABLE(joystick2), - KEY_NAME_TABLE(linear15), + KEY_NAME_TABLE(linear), + KEY_NAME_TABLE(keyboard), // For braille keyboard when not in usb-hid mode. KEY_NAME_TABLE(routing), END_KEY_NAME_TABLES @@ -478,16 +475,16 @@ handleSystemInformation (BrailleDisplay *brl, unsigned char *packet) { enum {Unknown, End, String, Dec8, Dec16, Hex32} infoType; switch(packet[0]) { - case 'H': + case LP_SYSTEM_SHORTNAME: infoType = String; infoDescription = "Short Name"; break; - case 'I': + case LP_SYSTEM_IDENTITY: infoType = End; break; - case 'G': + case LP_SYSTEM_DISPLAY_LENGTH: if (haveSystemInformation) brl->resizeRequired = 1; brl->textColumns = packet[1]; @@ -495,12 +492,12 @@ handleSystemInformation (BrailleDisplay *brl, unsigned char *packet) { infoDescription = "Cell Count"; break; - case 'L': + case LP_SYSTEM_LANGUAGE: infoType = String; infoDescription = "Country Code"; break; - case 'M': + case LP_SYSTEM_FRAME_LENGTH: maximumFrameLength = (packet[1] << 8) | (packet[2] << 0) ; @@ -509,12 +506,12 @@ handleSystemInformation (BrailleDisplay *brl, unsigned char *packet) { infoDescription = "Maximum Frame Length"; break; - case 'N': + case LP_SYSTEM_NAME: infoType = String; infoDescription = "Long Name"; break; - case 'O': + case LP_SYSTEM_OPTION: deviceOptions = (packet[1] << 24) | (packet[2] << 16) | (packet[3] << 8) @@ -525,7 +522,7 @@ handleSystemInformation (BrailleDisplay *brl, unsigned char *packet) { infoDescription = "Device Options"; break; - case 'P': + case LP_SYSTEM_PROTOCOL: protocolVersion = ((packet[1] - '0') << 16) | ((packet[3] - '0') << 8) | ((packet[4] - '0') << 0) @@ -535,12 +532,12 @@ handleSystemInformation (BrailleDisplay *brl, unsigned char *packet) { infoDescription = "Protocol Version"; break; - case 'S': + case LP_SYSTEM_SERIAL: infoType = String; infoDescription = "Serial Number"; break; - case 'T': + case LP_SYSTEM_TYPE: { unsigned char identifier = packet[1]; @@ -553,7 +550,7 @@ handleSystemInformation (BrailleDisplay *brl, unsigned char *packet) { infoDescription = "Model Identifier"; break; - case 'W': + case LP_SYSTEM_SOFTWARE: firmwareVersion = ((packet[1] - '0') << 16) | ((packet[3] - '0') << 8) | ((packet[4] - '0') << 0) @@ -706,26 +703,25 @@ makeKeyboardCommand (BrailleDisplay *brl, const unsigned char *packet) { static int handleKeyEvent (BrailleDisplay *brl, unsigned char *packet) { switch (packet[0]) { - case 'B': { + case LP_KEY_BRAILLE: { KeyNumberSet keys = ((packet[1] << 8) | packet[2]) & 0X3Ff; - enqueueKeys(brl, keys, EU_GRP_BrailleKeys, 0); return 1; } - case 'I': { + case LP_KEY_INTERACTIVE: { unsigned char key = packet[2]; if ((key > 0) && (key <= brl->textColumns)) { key -= 1; switch (packet[1]) { - case 1: // single click + case INTERACTIVE_SINGLE_CLIC: // single click enqueueKey(brl, EU_GRP_RoutingKeys1, key); - case 2: // repeat + case INTERACTIVE_REPETITION: // repeat return 1; - case 3: // double click + case INTERACTIVE_DOUBLE_CLIC: // double click enqueueKey(brl, EU_GRP_RoutingKeys2, key); return 1; @@ -737,7 +733,7 @@ handleKeyEvent (BrailleDisplay *brl, unsigned char *packet) { break; } - case 'C': { + case LP_KEY_COMMAND: { KeyNumberSet keys; if (model->isIris) { @@ -755,7 +751,7 @@ handleKeyEvent (BrailleDisplay *brl, unsigned char *packet) { return 1; } - case 'Z': { + case LP_KEY_PC: { int command = makeKeyboardCommand(brl, packet); enqueueCommand(command); @@ -777,22 +773,22 @@ readCommand (BrailleDisplay *brl, KeyTableCommandContext ctx) { while ((length = readPacket(brl, packet, sizeof(packet))) > 0) { switch (packet[3]) { - case 'S': + case LP_SYSTEM: if (handleSystemInformation(brl, packet+4)) haveSystemInformation = 1; continue; - case 'K': + case LP_KEY: if (handleKeyEvent(brl, packet+4)) continue; break; - case 'R': - if (packet[4] == 'P') { + case LP_MODE: + if (packet[4] == LP_MODE_PILOT) { /* return from internal menu */ forceRewrite(); } continue; - case 'V': + case LP_VISU: /* ignore visualization */ continue; @@ -825,7 +821,7 @@ initializeDevice (BrailleDisplay *brl) { do { { - static const unsigned char packet[] = {'S', 'I'}; + static const unsigned char packet[] = {LP_SYSTEM, LP_SYSTEM_IDENTITY}; if (writePacket(brl, packet, sizeof(packet)) == -1) return 0; } @@ -866,8 +862,8 @@ writeWindow (BrailleDisplay *brl) { unsigned char data[size + 2]; unsigned char *byte = data; - *byte++ = 'B'; - *byte++ = 'S'; + *byte++ = LP_BRAILLE_DISPLAY; + *byte++ = LP_BRAILLE_DISPLAY_STATIC; byte = translateOutputCells(byte, brl->buffer, size); if (writePacket(brl, data, byte-data) == -1) return 0; @@ -892,8 +888,8 @@ writeVisual (BrailleDisplay *brl, const wchar_t *text) { unsigned char data[size + 2]; unsigned char *byte = data; - *byte++ = 'L'; - *byte++ = 'T'; + *byte++ = LP_LCD_DISPLAY; + *byte++ = LP_LCD_DISPLAY_TEXT; { const wchar_t *character = text; @@ -914,7 +910,7 @@ writeVisual (BrailleDisplay *brl, const wchar_t *text) { if (cursorHasChanged(&previousCursor, brl->cursor, &forceCursorRewrite )) { const unsigned char packet[] = { - 'L', 'C', ((brl->cursor != BRL_NO_CURSOR)? (brl->cursor + 1): 0) + LP_LCD_DISPLAY, LP_LCD_DISPLAY_CARET, ((brl->cursor != BRL_NO_CURSOR)? (brl->cursor + 1): 0) }; if (writePacket(brl, packet, sizeof(packet)) == -1) return 0; diff --git a/Drivers/Braille/EuroBraille/eu_protocol.h b/Drivers/Braille/EuroBraille/eu_protocol.h index 92e7bf87..d0f1b0cf 100644 --- a/Drivers/Braille/EuroBraille/eu_protocol.h +++ b/Drivers/Braille/EuroBraille/eu_protocol.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/EuroBraille/eu_protocoldef.h b/Drivers/Braille/EuroBraille/eu_protocoldef.h new file mode 100644 index 00000000..2bc72491 --- /dev/null +++ b/Drivers/Braille/EuroBraille/eu_protocoldef.h @@ -0,0 +1,178 @@ + +///////////////////////////////////////////////////////////////// +// LINK PROTOCOL - KEY + // this key is operational only if subkey is 'B','D' or 'B','S' (LP_BRAILLE_DISPLAY,LP_BRAILLE_DISPLAY_STATIC/LP_BRAILLE_DISPLAY_DYNAMIC +#define LP_SPECIFIC_PROTOCOL '1' + +#define LP_SYSTEM 'S' +#define LP_MODE 'R' +#define LP_KEY 'K' +#define LP_PARAMETER 'P' //specific esytime2 +#define LP_TRANSFERT 't' // Specific Esytime. +#define LP_ENCRYPTION_KEY 'Z' +#define LP_BRAILLE_DISPLAY 'B' +#define LP_LCD_DISPLAY 'L' +//#define LP_TEST 'T' +//#define LP_SOUND 'M' +//#define LP_DEBUG 'D' // Trame de Débug +#define LP_VISU 'V' // Trame de Visualisation + +// LINK PROTOCOL LP_ENCRYPTION_KEY +#define LP_ENCRYPTION_KEY_1 '1' +#define LP_ENCRYPTION_KEY_2 '2' +#define LP_ENCRYPTION_KEY_3 '3' +#define LP_EXT_KEY 'X' +#define LP_END_KEY 'E' + +// LINK PROTOCOL KEYBOARD - SUBKey +#define LP_KEY_INTERACTIVE 'I' +#define LP_KEY_COMMAND 'C' +#define LP_KEY_OPTICAL 'O' +#define LP_KEY_BRAILLE 'B' +#define LP_KEY_PC 'Z' +#define LP_KEY_FINGER 'F' +#define LP_KEY_USB_HID_MODE 'U' +#define LP_KEY_USB 'u' // Trame touche à générer via l'USB (Spécific Esytouch) + + +// LINK PROTOCOL BRAILLEDISPLAY - SUBKEY +#define LP_BRAILLE_DISPLAY_STATIC 'S' +#define LP_BRAILLE_DISPLAY_DYNAMIC 'C' +#define LP_BRAILLE_DISPLAY_BLINK 'B' +//#define LP_BRAILLE_DISPLAY_DEBUG_TEXT 'X' + +// LINK PROTOCOL BRAILLEDISPLAY - SUBKEY +#define LP_LCD_DISPLAY_TEXT 'T' +#define LP_LCD_DISPLAY_CARET 'C' + +// LINK PROTOCOL SYSTEM - SUBKEY +#define LP_SYSTEM_IDENTITY 'I' +#define LP_SYSTEM_NAME 'N' +#define LP_SYSTEM_SHORTNAME 'H' +#define LP_SYSTEM_SERIAL 'S' +#define LP_SYSTEM_LANGUAGE 'L' +#define LP_SYSTEM_LANGUAGE_OPTION 'l' +#define LP_SYSTEM_BATTERY 'B' +#define LP_SYSTEM_DISPLAY_LENGTH 'G' +#define LP_SYSTEM_TYPE 'T' +#define LP_SYSTEM_OPTION 'O' +#define LP_SYSTEM_SOFTWARE 'W' +#define LP_SYSTEM_PROTOCOL 'P' +#define LP_SYSTEM_FRAME_LENGTH 'M' +#define LP_SYSTEM_DATE_AND_TIME 'D' +#define LP_SYSTEM_OPTICAL_VALUE 'o' + +// LINK PROTOCOL PARAMETERS - SUBKEY +#define LP_PARAMETER_NAME 'N' +#define LP_PARAMETER_SHORT_NAME 'S' +#define LP_PARAMETER_SERIAL 'R' +#define LP_PARAMETER_OPTION 'O' + + +// LINK PROTOCOL TEST - SUBKEY +#define LP_TEST_LINK 'L' + +// LINK PROTOCOL MODE - SUBKEY +#define LP_MODE_PILOT 'P' +#define LP_MODE_INTERNAL 'I' +#define LP_MODE_MENU 'M' +#define LP_MODE_SPECIFIC_PROTOCOL 'S' + +// LINK PROTOCOL SOUND - SUBKEY +#define LP_SOUND_PLAY 'P' +#define LP_SOUND_STOP 'A' + +// LINK PROTOCOL DEBUG - SUBKey +#define LP_DEBUG_SIMU 'S' // FIX ME à supprimer dans quelques jours... +#define LP_DEBUG_TRACE 'T' // FIX ME à supprimer dans quelques jours... +#define LP_DEBUG_LOG 'L' +#define LP_DEBUG_WARN 'W' +#define LP_DEBUG_ERROR 'E' + +// LINK PROTOCOL VISU - SUBKey +#define LP_VISU_TEXT 'T' +#define LP_VISU_DOT 'D' + +// LINK PROTOCOL TRANSFERT - SUBKey +#define LP_TRANSFERT_PARAMETERS 'p' // Request to receive or send the assignment table. +//#define LP_TRANSFERT_TABLE 't' // Request to receive or send the assignment table. +#define LP_TRANSFERT_FIRMWARE 'f' // Request to send the assignment table. +#define LP_TRANSFERT_RECORD 'r' // A record in Intel Hexa format. +#define LP_TRANSFERT_NEXT_RECORD 'n' // Request to receive the next record. +#define LP_TRANSFERT_ASK_CHECKSUM 'c' // Ask the checksum on complete hex file. +#define LP_TRANSFERT_END 'e' // Notify the end of transfert. +#define LP_TRANSFERT_ERROR 'o' // Error + +///////////////////////////////////////////////////////////////// +// TYPE OF INTERACTIVE KEYS +#define INTERACTIVE_SINGLE_CLIC 0x01 +#define INTERACTIVE_REPETITION 0x02 +#define INTERACTIVE_DOUBLE_CLIC 0x03 + +///////////////////////////////////////////////////////////////// +// IRIS COMMANDS KEYBOARD +typedef enum { + IRIS_L1_KEY = 0x00000001, + IRIS_L2_KEY = 0x00000002, + IRIS_L3_KEY = 0x00000004, + IRIS_L4_KEY = 0x00000008, + IRIS_L5_KEY = 0x00000010, + IRIS_L6_KEY = 0x00000020, + IRIS_L7_KEY = 0x00000040, + IRIS_L8_KEY = 0x00000080, + IRIS_UP_KEY = 0x00000100, + IRIS_LEFT_KEY = 0x00000800, + IRIS_RIGHT_KEY = 0x00000400, + IRIS_DOWN_KEY = 0x00000200, +} IRIS_COMMAND, * PIRIS_COMMAND; + +///////////////////////////////////////////////////////////////// +// ESYS COMMANDS KEYBOARD +typedef enum { + ESYS_SCROLLER1_RIGHT_KEY = 0x00000001, + ESYS_SCROLLER1_LEFT_KEY = 0x00000002, + ESYS_SCROLLER2_RIGHT_KEY = 0x00000004, + ESYS_SCROLLER2_LEFT_KEY = 0x00000008, + ESYS_SCROLLER3_RIGHT_KEY = 0x00000010, + ESYS_SCROLLER3_LEFT_KEY = 0x00000020, + ESYS_SCROLLER4_RIGHT_KEY = 0x00000040, + ESYS_SCROLLER4_LEFT_KEY = 0x00000080, + ESYS_SCROLLER5_RIGHT_KEY = 0x00000100, + ESYS_SCROLLER5_LEFT_KEY = 0x00000200, + ESYS_SCROLLER6_RIGHT_KEY = 0x00000400, + ESYS_SCROLLER6_LEFT_KEY = 0x00000800, + ESYS_JOYSTICK1_UP_KEY = 0x00010000, + ESYS_JOYSTICK1_DOWN_KEY = 0x00020000, + ESYS_JOYSTICK1_RIGHT_KEY = 0x00040000, + ESYS_JOYSTICK1_LEFT_KEY = 0x00080000, + ESYS_JOYSTICK1_MIDDLE_KEY = 0x00100000, + ESYS_JOYSTICK2_UP_KEY = 0x01000000, + ESYS_JOYSTICK2_DOWN_KEY = 0x02000000, + ESYS_JOYSTICK2_RIGHT_KEY = 0x04000000, + ESYS_JOYSTICK2_LEFT_KEY = 0x08000000, + ESYS_JOYSTICK2_MIDDLE_KEY = 0x10000000 +} ESYS_COMMAND, * PESYS_COMMAND; + +///////////////////////////////////////////////////////////////// +// ESYTIME COMMANDS KEYBOARD +typedef enum { + ESYTIME_L1_KEY = 0x00000001, + ESYTIME_L2_KEY = 0x00000002, + ESYTIME_L3_KEY = 0x00000004, + ESYTIME_L4_KEY = 0x00000008, + ESYTIME_L5_KEY = 0x00000010, + ESYTIME_L6_KEY = 0x00000020, + ESYTIME_L7_KEY = 0x00000040, + ESYTIME_L8_KEY = 0x00000080, + ESYTIME_JOYSTICK1_UP_KEY = 0x00010000, + ESYTIME_JOYSTICK1_DOWN_KEY = 0x00020000, + ESYTIME_JOYSTICK1_RIGHT_KEY = 0x00040000, + ESYTIME_JOYSTICK1_LEFT_KEY = 0x00080000, + ESYTIME_JOYSTICK1_MIDDLE_KEY = 0x00100000, + ESYTIME_JOYSTICK2_UP_KEY = 0x01000000, + ESYTIME_JOYSTICK2_DOWN_KEY = 0x02000000, + ESYTIME_JOYSTICK2_RIGHT_KEY = 0x04000000, + ESYTIME_JOYSTICK2_LEFT_KEY = 0x08000000, + ESYTIME_JOYSTICK2_MIDDLE_KEY = 0x10000000 +} ESYTIME_COMMAND, * PESYSTIME_COMMAND; + diff --git a/Drivers/Braille/EuroBraille/reldeps.mk b/Drivers/Braille/EuroBraille/reldeps.mk index 7adacf18..1a3cbc1d 100644 --- a/Drivers/Braille/EuroBraille/reldeps.mk +++ b/Drivers/Braille/EuroBraille/reldeps.mk @@ -74,6 +74,7 @@ eu_esysiris.$O: $(SRC_TOP)Headers/ktb_types.h eu_esysiris.$O: $(SRC_TOP)Headers/queue.h eu_esysiris.$O: $(SRC_TOP)Headers/serial_types.h eu_esysiris.$O: $(SRC_TOP)Headers/usb_types.h +eu_esysiris.$O: $(SRC_DIR)/eu_protocoldef.h # Dependencies for eutp_brl.$O: eutp_brl.$O: $(SRC_DIR)/eutp_brl.c diff --git a/Drivers/Braille/FreedomScientific/Makefile.in b/Drivers/Braille/FreedomScientific/Makefile.in index 974a656b..3669a26b 100644 --- a/Drivers/Braille/FreedomScientific/Makefile.in +++ b/Drivers/Braille/FreedomScientific/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/FreedomScientific/braille.c b/Drivers/Braille/FreedomScientific/braille.c index 4cef7924..16efe335 100644 --- a/Drivers/Braille/FreedomScientific/braille.c +++ b/Drivers/Braille/FreedomScientific/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -479,7 +479,7 @@ ASYNC_ALARM_CALLBACK(handleMissingAcknowledgementAlarm) { static int setMissingAcknowledgementAlarm (BrailleDisplay *brl, int timeout) { if (!brl->data->missingAcknowledgementAlarm) { - if (!asyncSetAlarmIn(&brl->data->missingAcknowledgementAlarm, timeout, + if (!asyncNewRelativeAlarm(&brl->data->missingAcknowledgementAlarm, timeout, handleMissingAcknowledgementAlarm, brl)) { return 0; } diff --git a/Drivers/Braille/FreedomScientific/brldefs-fs.h b/Drivers/Braille/FreedomScientific/brldefs-fs.h index 180f8be9..19265fdf 100644 --- a/Drivers/Braille/FreedomScientific/brldefs-fs.h +++ b/Drivers/Braille/FreedomScientific/brldefs-fs.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/HIMS/Makefile.in b/Drivers/Braille/HIMS/Makefile.in index 6d8eb287..b6fde868 100644 --- a/Drivers/Braille/HIMS/Makefile.in +++ b/Drivers/Braille/HIMS/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/HIMS/braille.c b/Drivers/Braille/HIMS/braille.c index cb174c49..876def07 100644 --- a/Drivers/Braille/HIMS/braille.c +++ b/Drivers/Braille/HIMS/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/HIMS/brldefs-hm.h b/Drivers/Braille/HIMS/brldefs-hm.h index 3e18d459..dcc7764e 100644 --- a/Drivers/Braille/HIMS/brldefs-hm.h +++ b/Drivers/Braille/HIMS/brldefs-hm.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/HandyTech/Makefile.in b/Drivers/Braille/HandyTech/Makefile.in index 2482b68e..b339f94e 100644 --- a/Drivers/Braille/HandyTech/Makefile.in +++ b/Drivers/Braille/HandyTech/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/HandyTech/braille.c b/Drivers/Braille/HandyTech/braille.c index ef95fd15..98810425 100644 --- a/Drivers/Braille/HandyTech/braille.c +++ b/Drivers/Braille/HandyTech/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -1560,7 +1560,7 @@ brl_readCommand (BrailleDisplay *brl, KeyTableCommandContext context) { case HT_EXTPKT_Scancode: { while (length--) enqueueCommand(BRL_CMD_BLK(PASSAT) | BRL_ARG_PUT(*bytes++)); - break; + continue; } case HT_EXTPKT_GetRTC: { diff --git a/Drivers/Braille/HandyTech/brldefs-ht.h b/Drivers/Braille/HandyTech/brldefs-ht.h index d94e3ba1..9d7ce57d 100644 --- a/Drivers/Braille/HandyTech/brldefs-ht.h +++ b/Drivers/Braille/HandyTech/brldefs-ht.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Hedo/Makefile.in b/Drivers/Braille/Hedo/Makefile.in index 602ba08b..71b9dda7 100644 --- a/Drivers/Braille/Hedo/Makefile.in +++ b/Drivers/Braille/Hedo/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Hedo/braille.c b/Drivers/Braille/Hedo/braille.c index 686eecbc..7acd4c76 100644 --- a/Drivers/Braille/Hedo/braille.c +++ b/Drivers/Braille/Hedo/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Hedo/brldefs-hd.h b/Drivers/Braille/Hedo/brldefs-hd.h index 5f1a01fc..9767cd15 100644 --- a/Drivers/Braille/Hedo/brldefs-hd.h +++ b/Drivers/Braille/Hedo/brldefs-hd.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/HumanWare/Makefile.in b/Drivers/Braille/HumanWare/Makefile.in index 6d178a5c..725e5fb7 100644 --- a/Drivers/Braille/HumanWare/Makefile.in +++ b/Drivers/Braille/HumanWare/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -18,7 +18,7 @@ DRIVER_CODE = hw DRIVER_NAME = HumanWare -DRIVER_COMMENT = Brailliant 32/40/80 bi +DRIVER_COMMENT = Brailliant BI 14/32/40, Brailliant B 80, BrailleNote Touch DRIVER_VERSION = DRIVER_DEVELOPERS = Dave Mielke include $(SRC_TOP)braille.mk diff --git a/Drivers/Braille/HumanWare/braille.c b/Drivers/Braille/HumanWare/braille.c index c998d049..2f060842 100644 --- a/Drivers/Braille/HumanWare/braille.c +++ b/Drivers/Braille/HumanWare/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -30,25 +30,11 @@ #include "brl_driver.h" #include "brldefs-hw.h" -BEGIN_KEY_NAME_TABLE(nav) - KEY_NAME_ENTRY(HW_KEY_Reset, "Reset"), - - KEY_NAME_ENTRY(HW_KEY_Command1, "Display1"), - KEY_NAME_ENTRY(HW_KEY_Command2, "Display2"), - KEY_NAME_ENTRY(HW_KEY_Command3, "Display3"), - KEY_NAME_ENTRY(HW_KEY_Command4, "Display4"), - KEY_NAME_ENTRY(HW_KEY_Command5, "Display5"), - KEY_NAME_ENTRY(HW_KEY_Command6, "Display6"), - - KEY_NAME_ENTRY(HW_KEY_Thumb1, "Thumb1"), - KEY_NAME_ENTRY(HW_KEY_Thumb2, "Thumb2"), - KEY_NAME_ENTRY(HW_KEY_Thumb3, "Thumb3"), - KEY_NAME_ENTRY(HW_KEY_Thumb4, "Thumb4"), - +BEGIN_KEY_NAME_TABLE(routing) KEY_GROUP_ENTRY(HW_GRP_RoutingKeys, "RoutingKey"), END_KEY_NAME_TABLE -BEGIN_KEY_NAME_TABLE(kbd) +BEGIN_KEY_NAME_TABLE(braille) KEY_NAME_ENTRY(HW_KEY_Dot1, "Dot1"), KEY_NAME_ENTRY(HW_KEY_Dot2, "Dot2"), KEY_NAME_ENTRY(HW_KEY_Dot3, "Dot3"), @@ -60,23 +46,115 @@ BEGIN_KEY_NAME_TABLE(kbd) KEY_NAME_ENTRY(HW_KEY_Space, "Space"), END_KEY_NAME_TABLE -BEGIN_KEY_NAME_TABLES(mb1) - KEY_NAME_TABLE(nav), +BEGIN_KEY_NAME_TABLE(command) + KEY_NAME_ENTRY(HW_KEY_Command1, "Display1"), + KEY_NAME_ENTRY(HW_KEY_Command2, "Display2"), + KEY_NAME_ENTRY(HW_KEY_Command3, "Display3"), + KEY_NAME_ENTRY(HW_KEY_Command4, "Display4"), + KEY_NAME_ENTRY(HW_KEY_Command5, "Display5"), + KEY_NAME_ENTRY(HW_KEY_Command6, "Display6"), +END_KEY_NAME_TABLE + +BEGIN_KEY_NAME_TABLE(joystick) + KEY_NAME_ENTRY(HW_KEY_Up, "Up"), + KEY_NAME_ENTRY(HW_KEY_Down, "Down"), + KEY_NAME_ENTRY(HW_KEY_Left, "Left"), + KEY_NAME_ENTRY(HW_KEY_Right, "Right"), + KEY_NAME_ENTRY(HW_KEY_Action, "Action"), +END_KEY_NAME_TABLE + +BEGIN_KEY_NAME_TABLE(thumb) + KEY_NAME_ENTRY(HW_KEY_Thumb1, "Previous"), + KEY_NAME_ENTRY(HW_KEY_Thumb2, "Back"), + KEY_NAME_ENTRY(HW_KEY_Thumb3, "Advance"), + KEY_NAME_ENTRY(HW_KEY_Thumb4, "Next"), +END_KEY_NAME_TABLE + +BEGIN_KEY_NAME_TABLES(BI14) + KEY_NAME_TABLE(routing), + KEY_NAME_TABLE(thumb), + KEY_NAME_TABLE(braille), + KEY_NAME_TABLE(joystick), +END_KEY_NAME_TABLES + +BEGIN_KEY_NAME_TABLES(BI32) + KEY_NAME_TABLE(routing), + KEY_NAME_TABLE(thumb), + KEY_NAME_TABLE(braille), + KEY_NAME_TABLE(command), +END_KEY_NAME_TABLES + +BEGIN_KEY_NAME_TABLES(BI40) + KEY_NAME_TABLE(routing), + KEY_NAME_TABLE(thumb), + KEY_NAME_TABLE(braille), + KEY_NAME_TABLE(command), +END_KEY_NAME_TABLES + +BEGIN_KEY_NAME_TABLES(B80) + KEY_NAME_TABLE(routing), + KEY_NAME_TABLE(thumb), + KEY_NAME_TABLE(command), END_KEY_NAME_TABLES -BEGIN_KEY_NAME_TABLES(mb2) - KEY_NAME_TABLE(nav), - KEY_NAME_TABLE(kbd), +BEGIN_KEY_NAME_TABLES(touch) + KEY_NAME_TABLE(routing), + KEY_NAME_TABLE(thumb), + KEY_NAME_TABLE(braille), END_KEY_NAME_TABLES -DEFINE_KEY_TABLE(mb1) -DEFINE_KEY_TABLE(mb2) +DEFINE_KEY_TABLE(BI14) +DEFINE_KEY_TABLE(BI32) +DEFINE_KEY_TABLE(BI40) +DEFINE_KEY_TABLE(B80) +DEFINE_KEY_TABLE(touch) BEGIN_KEY_TABLE_LIST - &KEY_TABLE_DEFINITION(mb1), - &KEY_TABLE_DEFINITION(mb2), + &KEY_TABLE_DEFINITION(BI14), + &KEY_TABLE_DEFINITION(BI32), + &KEY_TABLE_DEFINITION(BI40), + &KEY_TABLE_DEFINITION(B80), + &KEY_TABLE_DEFINITION(touch), END_KEY_TABLE_LIST +typedef struct { + const KeyTableDefinition *keyTableDefinition; + unsigned hasBrailleKeys:1; + unsigned hasCommandKeys:1; + unsigned hasJoystick:1; + unsigned hasSecondThumbKeys:1; +} ModelEntry; + +static const ModelEntry modelEntry_BI14 = { + .hasBrailleKeys = 1, + .hasJoystick = 1, + .keyTableDefinition = &KEY_TABLE_DEFINITION(BI14) +}; + +static const ModelEntry modelEntry_BI32 = { + .hasBrailleKeys = 1, + .hasCommandKeys = 1, + .keyTableDefinition = &KEY_TABLE_DEFINITION(BI32) +}; + +static const ModelEntry modelEntry_BI40 = { + .hasBrailleKeys = 1, + .hasCommandKeys = 1, + .keyTableDefinition = &KEY_TABLE_DEFINITION(BI40) +}; + +static const ModelEntry modelEntry_B80 = { + .hasCommandKeys = 1, + .hasSecondThumbKeys = 1, + .keyTableDefinition = &KEY_TABLE_DEFINITION(B80) +}; + +static const ModelEntry modelEntry_touch = { + .hasBrailleKeys = 1, + .hasCommandKeys = 0, + .keyTableDefinition = &KEY_TABLE_DEFINITION(touch) +}; + #define OPEN_READY_DELAY 100 #define SERIAL_PROBE_RESPONSE_TIMEOUT 1000 @@ -93,6 +171,7 @@ END_KEY_TABLE_LIST #define BRAILLE_KEY_COUNT (8 + 1) #define COMMAND_KEY_COUNT 6 #define THUMB_KEY_COUNT 4 +#define JOYSTICK_KEY_COUNT 5 typedef struct { const char *name; @@ -104,7 +183,10 @@ typedef struct { struct BrailleDataStruct { const ProtocolEntry *protocol; + const ModelEntry *model; + uint32_t firmwareVersion; + unsigned isBrailleNoteTouch:1; unsigned isOffline:1; struct { @@ -130,22 +212,39 @@ struct BrailleDataStruct { } hid; }; +static const ModelEntry * +getModelEntry (BrailleDisplay *brl) { + if (brl->data->isBrailleNoteTouch) return &modelEntry_touch; + + switch (brl->textColumns) { + case 14: return &modelEntry_BI14; + case 32: return &modelEntry_BI32; + case 40: return &modelEntry_BI40; + case 80: return &modelEntry_B80; + default: return NULL; + } +} + +static void +setModel (BrailleDisplay *brl) { + brl->data->model = getModelEntry(brl); +} + static int getDecimalValue (const char *digits, unsigned int count) { + const char *end = digits + count; unsigned int result = 0; - const char zero = '0'; - const char nine = '9'; - const char *digit = digits; - const char *end = digit + count; + while (digits < end) { + char digit = *digits++; + if (digit >= zero) digit -= zero; - while (digit < end) { - if (*digit < zero) return 0; - if (*digit > nine) return 0; + if (digit < 0) return 0; + if (digit > 9) return 0; result *= 10; - result += *digit++ - zero; + result += digit; } return result; @@ -157,20 +256,6 @@ setFirmwareVersion (BrailleDisplay *brl, unsigned char major, unsigned char mino brl->data->firmwareVersion = (major << 16) | (minor << 8) << (build << 0); } -static int -hasBrailleKeyboard (BrailleDisplay *brl) { - if (brl->textColumns == 18) return 1; - if (brl->textColumns == 32) return 1; - if (brl->textColumns == 40) return 1; - return 0; -} - -static int -hasSecondThumbKeys (BrailleDisplay *brl) { - if (brl->textColumns == 80) return 1; - return 0; -} - static int handleKeyEvent (BrailleDisplay *brl, unsigned char key, int press) { KeyGroup group; @@ -363,7 +448,14 @@ probeSerialDisplay (BrailleDisplay *brl) { response.fields.data.init.modelIdentifier, response.fields.data.init.cellCount); + switch (response.fields.data.init.modelIdentifier) { + case HW_MODEL_BrailleNoteTouch: + brl->data->isBrailleNoteTouch = 1; + break; + } + brl->textColumns = response.fields.data.init.cellCount; + setModel(brl); writeSerialRequest(brl, HW_MSG_GET_FIRMWARE_VERSION); writeSerialRequest(brl, HW_MSG_GET_KEYS); @@ -540,12 +632,15 @@ probeHidDisplay (BrailleDisplay *brl) { getDecimalValue(&capabilities.version.build[0], 2)); brl->textColumns = capabilities.cellCount; + setModel(brl); { unsigned char *size = &brl->data->hid.pressedKeys.reportSize; - *size = 1 + THUMB_KEY_COUNT + COMMAND_KEY_COUNT + brl->textColumns; - if (hasBrailleKeyboard(brl)) *size += BRAILLE_KEY_COUNT; - if (hasSecondThumbKeys(brl)) *size += THUMB_KEY_COUNT; + *size = 1 + THUMB_KEY_COUNT + brl->textColumns; + if (brl->data->model->hasBrailleKeys) *size += BRAILLE_KEY_COUNT; + if (brl->data->model->hasCommandKeys) *size += COMMAND_KEY_COUNT; + if (brl->data->model->hasJoystick) *size += JOYSTICK_KEY_COUNT; + if (brl->data->model->hasSecondThumbKeys) *size += THUMB_KEY_COUNT; } return 1; @@ -612,6 +707,26 @@ static const ProtocolEntry hidProtocol = { .keepAwake = keepHidAwake }; +typedef struct { + const ProtocolEntry *protocol; + unsigned isTouch:1; +} ResourceData; + +static const ResourceData resourceData_serial = { + .isTouch = 0, // probing detects if it's a Touch or not + .protocol = &serialProtocol +}; + +static const ResourceData resourceData_HID = { + .isTouch = 0, // only for non-Touch models + .protocol = &hidProtocol +}; + +static const ResourceData resourceData_touch = { + .isTouch = 1, + .protocol = &hidProtocol +}; + static int connectResource (BrailleDisplay *brl, const char *identifier) { static const SerialParameters serialParameters = { @@ -626,21 +741,21 @@ connectResource (BrailleDisplay *brl, const char *identifier) { .configuration=1, .interface=1, .alternative=0, .inputEndpoint=2, .outputEndpoint=3, .serial = &serialParameters, - .data = &serialProtocol + .data = &resourceData_serial }, - { /* all models (HID protocol) */ + { /* non-Touch models (HID protocol) */ .vendor=0X1C71, .product=0XC006, .configuration=1, .interface=0, .alternative=0, .inputEndpoint=1, - .data = &hidProtocol + .data = &resourceData_HID }, { /* BrailleNote Touch (HID protocol) */ .vendor=0X1C71, .product=0XC00A, .configuration=1, .interface=0, .alternative=0, .inputEndpoint=1, - .data = &hidProtocol + .data = &resourceData_touch }, END_USB_CHANNEL_DEFINITIONS @@ -648,18 +763,20 @@ connectResource (BrailleDisplay *brl, const char *identifier) { gioInitializeDescriptor(&descriptor); descriptor.serial.parameters = &serialParameters; - descriptor.serial.options.applicationData = &serialProtocol; + descriptor.serial.options.applicationData = &resourceData_serial; descriptor.serial.options.readyDelay = OPEN_READY_DELAY; descriptor.usb.channelDefinitions = usbChannelDefinitions; descriptor.usb.options.readyDelay = OPEN_READY_DELAY; descriptor.bluetooth.channelNumber = 1; - descriptor.bluetooth.options.applicationData = &serialProtocol; + descriptor.bluetooth.options.applicationData = &resourceData_serial; descriptor.bluetooth.options.readyDelay = OPEN_READY_DELAY; if (connectBrailleResource(brl, identifier, &descriptor, NULL)) { - brl->data->protocol = gioGetApplicationData(brl->gioEndpoint); + const ResourceData *resourceData = gioGetApplicationData(brl->gioEndpoint); + brl->data->protocol = resourceData->protocol; + brl->data->isBrailleNoteTouch = resourceData->isTouch; return 1; } @@ -678,15 +795,7 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { if (connectResource(brl, device)) { if (brl->data->protocol->probeDisplay(brl)) { - { - const KeyTableDefinition *ktd = - hasBrailleKeyboard(brl)? - &KEY_TABLE_DEFINITION(mb2): - &KEY_TABLE_DEFINITION(mb1); - - setBrailleKeyTable(brl, ktd); - } - + setBrailleKeyTable(brl, brl->data->model->keyTableDefinition); makeOutputTable(dotsTable_ISO11548_1); brl->data->text.rewrite = 1; return 1; diff --git a/Drivers/Braille/HumanWare/brldefs-hw.h b/Drivers/Braille/HumanWare/brldefs-hw.h index 2adbd02e..9666e365 100644 --- a/Drivers/Braille/HumanWare/brldefs-hw.h +++ b/Drivers/Braille/HumanWare/brldefs-hw.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * @@ -39,6 +39,10 @@ typedef enum { HW_MSG_POWERING_OFF = 0X10 } HW_MessageType; +typedef enum { + HW_MODEL_BrailleNoteTouch = 0X10 +} HW_ModelIdentifier; + typedef union { unsigned char bytes[3 + 0XFF]; @@ -154,6 +158,12 @@ typedef enum { HW_KEY_Thumb3 = 19, HW_KEY_Thumb4 = 20, + HW_KEY_Up = 21, + HW_KEY_Down = 22, + HW_KEY_Left = 23, + HW_KEY_Right = 24, + HW_KEY_Action = 25, + HW_KEY_CAL_OK = 30, HW_KEY_CAL_FAIL = 31, HW_KEY_CAL_EMPTY = 32, diff --git a/Drivers/Braille/Inceptor/Makefile.in b/Drivers/Braille/Inceptor/Makefile.in new file mode 100644 index 00000000..365c83b9 --- /dev/null +++ b/Drivers/Braille/Inceptor/Makefile.in @@ -0,0 +1,28 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2016 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +DRIVER_CODE = ic +DRIVER_NAME = Inceptor +DRIVER_COMMENT = BrailleMe +DRIVER_VERSION = +DRIVER_DEVELOPERS = Dave Mielke , Vipul Kute +include $(SRC_TOP)braille.mk + +braille.$O: + $(CC) $(BRL_CFLAGS) -c $(SRC_DIR)/braille.c + diff --git a/Drivers/Braille/Inceptor/braille.c b/Drivers/Braille/Inceptor/braille.c new file mode 100644 index 00000000..bd5bc70a --- /dev/null +++ b/Drivers/Braille/Inceptor/braille.c @@ -0,0 +1,372 @@ +/* + * BRLTTY - A background process providing access to the console screen (when in + * text mode) for a blind person using a refreshable braille display. + * + * Copyright (C) 1995-2016 by The BRLTTY Developers. + * + * BRLTTY comes with ABSOLUTELY NO WARRANTY. + * + * This is free software, placed under the terms of the + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. + * + * Web Page: http://brltty.com/ + * + * This software is maintained by Dave Mielke . + */ + +#include "prologue.h" + +#include +#include + +#include "log.h" + +#include "brl_driver.h" +#include "brldefs-ic.h" + +#define PROBE_RETRY_LIMIT 2 +#define PROBE_INPUT_TIMEOUT 1000 +#define MAXIMUM_TEXT_CELLS 0XFF + +BEGIN_KEY_NAME_TABLE(navigation) + KEY_NAME_ENTRY(IC_KEY_Dot1, "Dot1"), + KEY_NAME_ENTRY(IC_KEY_Dot2, "Dot2"), + KEY_NAME_ENTRY(IC_KEY_Dot3, "Dot3"), + KEY_NAME_ENTRY(IC_KEY_Dot4, "Dot4"), + KEY_NAME_ENTRY(IC_KEY_Dot5, "Dot5"), + KEY_NAME_ENTRY(IC_KEY_Dot6, "Dot6"), + KEY_NAME_ENTRY(IC_KEY_Dot7, "Dot7"), + KEY_NAME_ENTRY(IC_KEY_Dot8, "Dot8"), + + KEY_NAME_ENTRY(IC_KEY_LeftUp, "LeftUp"), + KEY_NAME_ENTRY(IC_KEY_LeftDown, "LeftDown"), + KEY_NAME_ENTRY(IC_KEY_RightUp, "RightUp"), + KEY_NAME_ENTRY(IC_KEY_RightDown, "RightDown"), + + KEY_NAME_ENTRY(IC_KEY_Back, "Back"), + KEY_NAME_ENTRY(IC_KEY_Space, "Space"), + KEY_NAME_ENTRY(IC_KEY_Enter, "Enter"), + + KEY_GROUP_ENTRY(IC_GRP_RoutingKeys, "RoutingKey"), +END_KEY_NAME_TABLE + +BEGIN_KEY_NAME_TABLES(all) + KEY_NAME_TABLE(navigation), +END_KEY_NAME_TABLES + +DEFINE_KEY_TABLE(all) + +BEGIN_KEY_TABLE_LIST + &KEY_TABLE_DEFINITION(all), +END_KEY_TABLE_LIST + +struct BrailleDataStruct { + struct { + unsigned char rewrite; + unsigned char cells[MAXIMUM_TEXT_CELLS]; + } braille; + + struct { + unsigned char rewrite; + wchar_t characters[MAXIMUM_TEXT_CELLS]; + } text; + + struct { + unsigned char rewrite; + int position; + } cursor; +}; + +static int +writeBytes (BrailleDisplay *brl, const unsigned char *bytes, size_t count) { + return writeBraillePacket(brl, NULL, bytes, count); +} + +static int +writePacket ( + BrailleDisplay *brl, + unsigned char type, unsigned char mode, + const unsigned char *data1, size_t length1, + const unsigned char *data2, size_t length2 +) { + unsigned char packet[2 + 1 + 1 + 2 + length1 + 1 + 1 + 2 + length2 + 1 + 4 + 1 + 2]; + unsigned char *byte = packet; + unsigned char *checksum; + + /* DS */ + *byte++ = type; + *byte++ = type; + + /* M */ + *byte++ = mode; + + /* DS1 */ + *byte++ = 0XF0; + + /* Cnt1 */ + *byte++ = (length1 >> 0) & 0XFF; + *byte++ = (length1 >> 8) & 0XFF; + + /* D1 */ + if (data1) byte = mempcpy(byte, data1, length1); + + /* DE1 */ + *byte++ = 0XF1; + + /* DS2 */ + *byte++ = 0XF2; + + /* Cnt2 */ + *byte++ = (length2 >> 0) & 0XFF; + *byte++ = (length2 >> 8) & 0XFF; + + /* D2 */ + if (data2) byte = mempcpy(byte, data2, length2); + + /* DE2 */ + *byte++ = 0XF3; + + /* Reserved */ + { + int count = 4; + while (count--) *byte++ = 0; + } + + /* Chk */ + *(checksum = byte++) = 0; + + /* DE */ + *byte++ = 0XFD; + *byte++ = 0XFD; + + { + unsigned char sum = 0; + const unsigned char *ptr = packet; + + while (ptr != byte) sum += *ptr++; + *checksum = sum; + } + + return writeBytes(brl, packet, (byte - packet)); +} + +static BraillePacketVerifierResult +verifyPacket ( + BrailleDisplay *brl, + const unsigned char *bytes, size_t size, + size_t *length, void *data +) { + unsigned char byte = bytes[size-1]; + + switch (size) { + case 1: { + switch (byte) { + case 0XFA: + *length = 10; + break; + + default: + return BRL_PVR_INVALID; + } + + break; + } + + default: + break; + } + + if (size == *length) { + switch (bytes[0]) { + case 0XFA: { + if (byte != 0XFB) return BRL_PVR_INVALID; + + const InputPacket *packet = (const void *)bytes; + int checksum = -packet->fields.checksum; + for (size_t i=0; ibytes[i]; + + if ((checksum & 0XFF) != packet->fields.checksum) { + logInputProblem("incorrect input checksum", packet->bytes, size); + return BRL_PVR_INVALID; + } + + break; + } + + default: + break; + } + } + + return BRL_PVR_INCLUDE; +} + +static size_t +readPacket (BrailleDisplay *brl, void *packet, size_t size) { + return readBraillePacket(brl, NULL, packet, size, verifyPacket, NULL); +} + +static int +connectResource (BrailleDisplay *brl, const char *identifier) { + BEGIN_USB_CHANNEL_DEFINITIONS + { /* all models */ + .vendor=0X1209, .product=0XABC0, + .configuration=1, .interface=0, .alternative=0, + .inputEndpoint=1, .outputEndpoint=2 + }, + END_USB_CHANNEL_DEFINITIONS + + GioDescriptor descriptor; + gioInitializeDescriptor(&descriptor); + + descriptor.usb.channelDefinitions = usbChannelDefinitions; + + descriptor.bluetooth.channelNumber = 1; + descriptor.bluetooth.discoverChannel = 1; + + if (connectBrailleResource(brl, identifier, &descriptor, NULL)) { + return 1; + } + + return 0; +} + +static int +writeIdentityRequest (BrailleDisplay *brl) { + static const unsigned char data1[20] = {0}; + return writePacket(brl, 0XFB, 0X01, data1, sizeof(data1), NULL, 0); +} + +static BrailleResponseResult +isIdentityResponse (BrailleDisplay *brl, const void *bytes, size_t size) { + const InputPacket *packet = bytes; + if (packet->fields.type != 0X02) return BRL_RSP_UNEXPECTED; + + brl->textColumns = packet->fields.data; + return BRL_RSP_DONE; +} + +static int +brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { + if ((brl->data = malloc(sizeof(*brl->data)))) { + memset(brl->data, 0, sizeof(*brl->data)); + + if (connectResource(brl, device)) { + InputPacket response; + + if (probeBrailleDisplay(brl, PROBE_RETRY_LIMIT, NULL, PROBE_INPUT_TIMEOUT, + writeIdentityRequest, + readPacket, &response, sizeof(response), + isIdentityResponse)) { + setBrailleKeyTable(brl, &KEY_TABLE_DEFINITION(all)); + makeOutputTable(dotsTable_ISO11548_1); + + brl->data->braille.rewrite = 1; + brl->data->text.rewrite = 1; + brl->data->cursor.rewrite = 1; + return 1; + } + + disconnectBrailleResource(brl, NULL); + } + + free(brl->data); + } else { + logMallocError(); + } + + return 0; +} + +static void +brl_destruct (BrailleDisplay *brl) { + disconnectBrailleResource(brl, NULL); + + if (brl->data) { + free(brl->data); + brl->data = NULL; + } +} + +static int +brl_writeWindow (BrailleDisplay *brl, const wchar_t *text) { + int cellCount = brl->textColumns; + + int newBraille = + cellsHaveChanged(brl->data->braille.cells, brl->buffer, cellCount, + NULL, NULL, &brl->data->braille.rewrite); + + int newText = + textHasChanged(brl->data->text.characters, text, cellCount, + NULL, NULL, &brl->data->text.rewrite); + + int newCursor = + cursorHasChanged(&brl->data->cursor.position, brl->cursor, + &brl->data->cursor.rewrite); + + if (newBraille || newText || newCursor) { + unsigned char cells[cellCount]; + unsigned char attributes[cellCount]; + int cursor; + + translateOutputCells(cells, brl->data->braille.cells, cellCount); + memset(attributes, 0, sizeof(attributes)); + cursor = 0; + + for (int i=0; icursor >= 0) && (brl->cursor < cellCount)) { + cursor = brl->cursor + 1; + } + + if (!writePacket(brl, 0XFC, cursor, + cells, sizeof(cells), + attributes, sizeof(attributes))) return 0; + } + + return 1; +} + +static int +brl_readCommand (BrailleDisplay *brl, KeyTableCommandContext context) { + InputPacket packet; + size_t size; + + while ((size = readPacket(brl, &packet, sizeof(packet)))) { + switch (packet.fields.type) { + case 0X00: { + unsigned char key = packet.fields.data; + + enqueueKey(brl, IC_GRP_RoutingKeys, key); + continue; + } + + case 0X01: { + KeyNumberSet bits = (packet.fields.reserved[0] << 0X00) + | (packet.fields.reserved[1] << 0X08) + | (packet.fields.reserved[2] << 0X10) + | (packet.fields.reserved[3] << 0X18); + + enqueueKeys(brl, bits, IC_GRP_NavigationKeys, 0); + continue; + } + + default: + break; + } + + logUnexpectedPacket(&packet, size); + } + + return (errno == EAGAIN)? EOF: BRL_CMD_RESTARTBRL; +} diff --git a/Drivers/Braille/Inceptor/brldefs-ic.h b/Drivers/Braille/Inceptor/brldefs-ic.h new file mode 100644 index 00000000..98dfb2d1 --- /dev/null +++ b/Drivers/Braille/Inceptor/brldefs-ic.h @@ -0,0 +1,61 @@ +/* + * BRLTTY - A background process providing access to the console screen (when in + * text mode) for a blind person using a refreshable braille display. + * + * Copyright (C) 1995-2016 by The BRLTTY Developers. + * + * BRLTTY comes with ABSOLUTELY NO WARRANTY. + * + * This is free software, placed under the terms of the + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. + * + * Web Page: http://brltty.com/ + * + * This software is maintained by Dave Mielke . + */ + +#ifndef BRLTTY_INCLUDED_IC_BRLDEFS +#define BRLTTY_INCLUDED_IC_BRLDEFS + +typedef union { + unsigned char bytes[10]; + + struct { + unsigned char start; + unsigned char type; + unsigned char count; + unsigned char data; + unsigned char reserved[4]; + unsigned char checksum; + unsigned char end; + } PACKED fields; +} InputPacket; + +typedef enum { + IC_KEY_Dot1 = 0, + IC_KEY_Dot2 = 1, + IC_KEY_Dot3 = 2, + IC_KEY_Dot4 = 3, + IC_KEY_Dot5 = 4, + IC_KEY_Dot6 = 5, + IC_KEY_Dot7 = 6, + IC_KEY_Dot8 = 7, + + IC_KEY_Space = 8, + IC_KEY_LeftUp = 9, + IC_KEY_LeftDown = 10, + IC_KEY_RightUp = 11, + IC_KEY_RightDown = 12, + + IC_KEY_Back = 13, + IC_KEY_Enter = 14, +} IC_NavigationKey; + +typedef enum { + IC_GRP_NavigationKeys = 0, + IC_GRP_RoutingKeys +} IC_KeyGroup; + +#endif /* BRLTTY_INCLUDED_IC_BRLDEFS */ diff --git a/Drivers/Braille/Inceptor/reldeps.mk b/Drivers/Braille/Inceptor/reldeps.mk new file mode 100644 index 00000000..ac59d567 --- /dev/null +++ b/Drivers/Braille/Inceptor/reldeps.mk @@ -0,0 +1,26 @@ +# Dependencies for braille.$O: +braille.$O: $(SRC_DIR)/braille.c +braille.$O: $(SRC_TOP)Headers/prologue.h +braille.$O: $(BLD_TOP)config.h +braille.$O: $(BLD_TOP)forbuild.h +braille.$O: $(SRC_TOP)Headers/log.h +braille.$O: $(SRC_TOP)Headers/api_types.h +braille.$O: $(SRC_TOP)Headers/async.h +braille.$O: $(SRC_TOP)Headers/async_io.h +braille.$O: $(SRC_TOP)Headers/brl_base.h +braille.$O: $(SRC_TOP)Headers/brl_cmds.h +braille.$O: $(SRC_TOP)Headers/brl_dots.h +braille.$O: $(SRC_TOP)Headers/brl_driver.h +braille.$O: $(SRC_TOP)Headers/brl_types.h +braille.$O: $(SRC_TOP)Headers/brl_utils.h +braille.$O: $(SRC_TOP)Headers/cmd_enqueue.h +braille.$O: $(SRC_TOP)Headers/driver.h +braille.$O: $(SRC_TOP)Headers/gio_types.h +braille.$O: $(SRC_TOP)Headers/io_generic.h +braille.$O: $(SRC_TOP)Headers/ktb_types.h +braille.$O: $(SRC_TOP)Headers/queue.h +braille.$O: $(SRC_TOP)Headers/serial_types.h +braille.$O: $(SRC_TOP)Headers/status_types.h +braille.$O: $(SRC_TOP)Headers/usb_types.h +braille.$O: $(SRC_DIR)/brldefs-ic.h + diff --git a/Drivers/Braille/Iris/Makefile.in b/Drivers/Braille/Iris/Makefile.in index e375b9cc..5fd4be9b 100644 --- a/Drivers/Braille/Iris/Makefile.in +++ b/Drivers/Braille/Iris/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Iris/braille.c b/Drivers/Braille/Iris/braille.c index 554a139d..5f275aca 100644 --- a/Drivers/Braille/Iris/braille.c +++ b/Drivers/Braille/Iris/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -1848,7 +1848,7 @@ startLatchMonitor (BrailleDisplay *brl) { if (brl->data->latch.monitor) return 1; if (!brl->data->latch.delay) return 1; - if (asyncSetAlarmIn(&brl->data->latch.monitor, 0, irMonitorLatch, brl)) { + if (asyncNewRelativeAlarm(&brl->data->latch.monitor, 0, irMonitorLatch, brl)) { if (asyncResetAlarmEvery(brl->data->latch.monitor, brl->data->latch.interval)) { brl->data->latch.pulled = 0; return 1; diff --git a/Drivers/Braille/Iris/brldefs-ir.h b/Drivers/Braille/Iris/brldefs-ir.h index 2007bacb..a11b6a59 100644 --- a/Drivers/Braille/Iris/brldefs-ir.h +++ b/Drivers/Braille/Iris/brldefs-ir.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Libbraille/Makefile.in b/Drivers/Braille/Libbraille/Makefile.in index 00301c3e..79d14db0 100644 --- a/Drivers/Braille/Libbraille/Makefile.in +++ b/Drivers/Braille/Libbraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Libbraille/braille.c b/Drivers/Braille/Libbraille/braille.c index e0a7dd08..0f0b7f53 100644 --- a/Drivers/Braille/Libbraille/braille.c +++ b/Drivers/Braille/Libbraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/LogText/Makefile.in b/Drivers/Braille/LogText/Makefile.in index abfdbdc0..be9eee55 100644 --- a/Drivers/Braille/LogText/Makefile.in +++ b/Drivers/Braille/LogText/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/LogText/braille.c b/Drivers/Braille/LogText/braille.c index 6bfa2b80..a00ed9b5 100644 --- a/Drivers/Braille/LogText/braille.c +++ b/Drivers/Braille/LogText/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -111,8 +111,8 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { } } - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/LogText/braille.h b/Drivers/Braille/LogText/braille.h index d50de769..14160641 100644 --- a/Drivers/Braille/LogText/braille.h +++ b/Drivers/Braille/LogText/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/LogText/brl-out.h b/Drivers/Braille/LogText/brl-out.h index 4c727ee4..39607de3 100644 --- a/Drivers/Braille/LogText/brl-out.h +++ b/Drivers/Braille/LogText/brl-out.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/MDV/Makefile.in b/Drivers/Braille/MDV/Makefile.in index 5160fa66..b8a6fdb6 100644 --- a/Drivers/Braille/MDV/Makefile.in +++ b/Drivers/Braille/MDV/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/MDV/braille.c b/Drivers/Braille/MDV/braille.c index 5f7a6a8a..92278912 100644 --- a/Drivers/Braille/MDV/braille.c +++ b/Drivers/Braille/MDV/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/MDV/brldefs-md.h b/Drivers/Braille/MDV/brldefs-md.h index 99e6d04b..eb9a2340 100644 --- a/Drivers/Braille/MDV/brldefs-md.h +++ b/Drivers/Braille/MDV/brldefs-md.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Metec/Makefile.in b/Drivers/Braille/Metec/Makefile.in index ca683e7d..63e92ee3 100644 --- a/Drivers/Braille/Metec/Makefile.in +++ b/Drivers/Braille/Metec/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Metec/braille.c b/Drivers/Braille/Metec/braille.c index 11fab357..77b91382 100644 --- a/Drivers/Braille/Metec/braille.c +++ b/Drivers/Braille/Metec/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -282,7 +282,7 @@ ASYNC_ALARM_CALLBACK(handleUsbStatusAlarm) { static int setUsbStatusAlarm (BrailleDisplay *brl) { - return asyncSetAlarmIn(&brl->data->proto.usb.statusAlarm, + return asyncNewRelativeAlarm(&brl->data->proto.usb.statusAlarm, BRAILLE_DRIVER_INPUT_POLL_INTERVAL, handleUsbStatusAlarm, brl); } diff --git a/Drivers/Braille/Metec/brldefs-mt.h b/Drivers/Braille/Metec/brldefs-mt.h index c7f5a489..8813dfb6 100644 --- a/Drivers/Braille/Metec/brldefs-mt.h +++ b/Drivers/Braille/Metec/brldefs-mt.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/MiniBraille/Makefile.in b/Drivers/Braille/MiniBraille/Makefile.in index 99e952e8..f672eda0 100644 --- a/Drivers/Braille/MiniBraille/Makefile.in +++ b/Drivers/Braille/MiniBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/MiniBraille/braille.c b/Drivers/Braille/MiniBraille/braille.c index 814d84ea..02b921e5 100644 --- a/Drivers/Braille/MiniBraille/braille.c +++ b/Drivers/Braille/MiniBraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -339,8 +339,8 @@ resetInputMode (void) { static int brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/MultiBraille/Makefile.in b/Drivers/Braille/MultiBraille/Makefile.in index 449f6cbc..c9804c7d 100644 --- a/Drivers/Braille/MultiBraille/Makefile.in +++ b/Drivers/Braille/MultiBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/MultiBraille/README b/Drivers/Braille/MultiBraille/README index f3a6edf7..784d6538 100644 --- a/Drivers/Braille/MultiBraille/README +++ b/Drivers/Braille/MultiBraille/README @@ -8,8 +8,8 @@ Copyright (C) 2000 by Wolfgang Astleitner. ) This driver is part of BRLTTY, and as such it is placed under the -terms of the GNU General Public License, as published by the Free -Software Foundation. Please see the file LICENSE-GPL in the top-level +terms of the GNU Lesser General Public License, as published by the Free +Software Foundation. Please see the file LICENSE-LGPL in the top-level directory for details. This driver is maintained by Wolfgang Astleitner . diff --git a/Drivers/Braille/MultiBraille/braille.c b/Drivers/Braille/MultiBraille/braille.c index 9dba9101..0af9ab11 100644 --- a/Drivers/Braille/MultiBraille/braille.c +++ b/Drivers/Braille/MultiBraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -98,8 +98,8 @@ static int brl_construct (BrailleDisplay *brl, char **parameters, const char *de unsigned char c; TimePeriod period; - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/MultiBraille/braille.h b/Drivers/Braille/MultiBraille/braille.h index 07c8a94c..163f3ba4 100644 --- a/Drivers/Braille/MultiBraille/braille.h +++ b/Drivers/Braille/MultiBraille/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/MultiBraille/tables.h b/Drivers/Braille/MultiBraille/tables.h index a719872a..94af4e44 100644 --- a/Drivers/Braille/MultiBraille/tables.h +++ b/Drivers/Braille/MultiBraille/tables.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/NinePoint/Makefile.in b/Drivers/Braille/NinePoint/Makefile.in index 17238cf6..96321e27 100644 --- a/Drivers/Braille/NinePoint/Makefile.in +++ b/Drivers/Braille/NinePoint/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/NinePoint/braille.c b/Drivers/Braille/NinePoint/braille.c index 0bc87a4b..951f7f63 100644 --- a/Drivers/Braille/NinePoint/braille.c +++ b/Drivers/Braille/NinePoint/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/NinePoint/brldefs-np.h b/Drivers/Braille/NinePoint/brldefs-np.h index 5bfe1e3f..35a75a97 100644 --- a/Drivers/Braille/NinePoint/brldefs-np.h +++ b/Drivers/Braille/NinePoint/brldefs-np.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Papenmeier/Makefile.in b/Drivers/Braille/Papenmeier/Makefile.in index fc6c441b..1d7c7d6a 100644 --- a/Drivers/Braille/Papenmeier/Makefile.in +++ b/Drivers/Braille/Papenmeier/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Papenmeier/README b/Drivers/Braille/Papenmeier/README index 9e70d221..8c3f9748 100644 --- a/Drivers/Braille/Papenmeier/README +++ b/Drivers/Braille/Papenmeier/README @@ -6,9 +6,9 @@ Version 2.1 (October 2001) Copyright ========= -This driver is copyrighted under the GNU Public License. It is free -software. See the file 'LICENSE-GPL' for more details. Feel free to send -your comments and to report bugs (if any :)) to us at +This driver is copyrighted under the GNU Lesser General Public License. +It is free software. See the file 'LICENSE-LGPL' for more details. +Feel free to send your comments and to report bugs (if any :)) to us at august.hoerandl@gmx.at or heimo.schoen@gmx.at Supported Hardware diff --git a/Drivers/Braille/Papenmeier/braille.c b/Drivers/Braille/Papenmeier/braille.c index 83f8b04b..263fdf92 100644 --- a/Drivers/Braille/Papenmeier/braille.c +++ b/Drivers/Braille/Papenmeier/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Papenmeier/brldefs-pm.h b/Drivers/Braille/Papenmeier/brldefs-pm.h index 41fe07a7..4ee19bdb 100644 --- a/Drivers/Braille/Papenmeier/brldefs-pm.h +++ b/Drivers/Braille/Papenmeier/brldefs-pm.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Papenmeier/models.h b/Drivers/Braille/Papenmeier/models.h index 03130d94..64b77b79 100644 --- a/Drivers/Braille/Papenmeier/models.h +++ b/Drivers/Braille/Papenmeier/models.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Pegasus/Makefile.in b/Drivers/Braille/Pegasus/Makefile.in index c664450f..ef897758 100644 --- a/Drivers/Braille/Pegasus/Makefile.in +++ b/Drivers/Braille/Pegasus/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Pegasus/braille.c b/Drivers/Braille/Pegasus/braille.c index 27fb8dca..123771ee 100644 --- a/Drivers/Braille/Pegasus/braille.c +++ b/Drivers/Braille/Pegasus/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -473,12 +473,12 @@ static const InputOutputOperations usbOperations = { static int brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { - if (isSerialDevice(&device)) { + if (isSerialDeviceIdentifier(&device)) { io = &serialOperations; - } else if (isUsbDevice(&device)) { + } else if (isUsbDeviceIdentifier(&device)) { io = &usbOperations; } else { - unsupportedDevice(device); + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/Pegasus/brldefs-pg.h b/Drivers/Braille/Pegasus/brldefs-pg.h index 30ec454a..3d2d8486 100644 --- a/Drivers/Braille/Pegasus/brldefs-pg.h +++ b/Drivers/Braille/Pegasus/brldefs-pg.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Seika/Makefile.in b/Drivers/Braille/Seika/Makefile.in index 006ee277..0be3b3b5 100644 --- a/Drivers/Braille/Seika/Makefile.in +++ b/Drivers/Braille/Seika/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Seika/braille.c b/Drivers/Braille/Seika/braille.c index 953e0a59..7e1e0866 100644 --- a/Drivers/Braille/Seika/braille.c +++ b/Drivers/Braille/Seika/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Seika/brldefs-sk.h b/Drivers/Braille/Seika/brldefs-sk.h index a1ab2fce..c3ecb3db 100644 --- a/Drivers/Braille/Seika/brldefs-sk.h +++ b/Drivers/Braille/Seika/brldefs-sk.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/Skeleton/Makefile.in b/Drivers/Braille/Skeleton/Makefile.in index 109f218b..ceda518b 100644 --- a/Drivers/Braille/Skeleton/Makefile.in +++ b/Drivers/Braille/Skeleton/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Skeleton/braille.c b/Drivers/Braille/Skeleton/braille.c index 5ca2e0c8..e29a9e96 100644 --- a/Drivers/Braille/Skeleton/braille.c +++ b/Drivers/Braille/Skeleton/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Skeleton/brldefs-xx.h b/Drivers/Braille/Skeleton/brldefs-xx.h index 475e9a3a..398470b0 100644 --- a/Drivers/Braille/Skeleton/brldefs-xx.h +++ b/Drivers/Braille/Skeleton/brldefs-xx.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/TSI/Makefile.in b/Drivers/Braille/TSI/Makefile.in index 51d1698e..a2e38b5b 100644 --- a/Drivers/Braille/TSI/Makefile.in +++ b/Drivers/Braille/TSI/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/TSI/braille.c b/Drivers/Braille/TSI/braille.c index 4914f681..13b48882 100644 --- a/Drivers/Braille/TSI/braille.c +++ b/Drivers/Braille/TSI/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/TSI/braille.h b/Drivers/Braille/TSI/braille.h index 000d92a7..c745a307 100644 --- a/Drivers/Braille/TSI/braille.h +++ b/Drivers/Braille/TSI/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/TSI/brldefs-ts.h b/Drivers/Braille/TSI/brldefs-ts.h index c0057f77..fd225823 100644 --- a/Drivers/Braille/TSI/brldefs-ts.h +++ b/Drivers/Braille/TSI/brldefs-ts.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/TTY/Makefile.in b/Drivers/Braille/TTY/Makefile.in index 261b3e7d..4b55346b 100644 --- a/Drivers/Braille/TTY/Makefile.in +++ b/Drivers/Braille/TTY/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/TTY/braille.c b/Drivers/Braille/TTY/braille.c index eecbb7b3..e9d355bf 100644 --- a/Drivers/Braille/TTY/braille.c +++ b/Drivers/Braille/TTY/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -113,8 +113,8 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { const char *characterSet = getLocaleCharset(); #endif /* HAVE_ICONV_H */ - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/TTY/braille.h b/Drivers/Braille/TTY/braille.h index 8e63ff90..df1860be 100644 --- a/Drivers/Braille/TTY/braille.h +++ b/Drivers/Braille/TTY/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/TechniBraille/Makefile.in b/Drivers/Braille/TechniBraille/Makefile.in index ff7ea5fe..5feae3e5 100644 --- a/Drivers/Braille/TechniBraille/Makefile.in +++ b/Drivers/Braille/TechniBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/TechniBraille/braille.c b/Drivers/Braille/TechniBraille/braille.c index 16827b3e..efc0698f 100644 --- a/Drivers/Braille/TechniBraille/braille.c +++ b/Drivers/Braille/TechniBraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -139,8 +139,8 @@ clearVisualText (BrailleDisplay *brl) { static int brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } diff --git a/Drivers/Braille/VideoBraille/Makefile.in b/Drivers/Braille/VideoBraille/Makefile.in index 1d753f24..89f21440 100644 --- a/Drivers/Braille/VideoBraille/Makefile.in +++ b/Drivers/Braille/VideoBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/VideoBraille/braille.c b/Drivers/Braille/VideoBraille/braille.c index 901be8f6..5714fc2d 100644 --- a/Drivers/Braille/VideoBraille/braille.c +++ b/Drivers/Braille/VideoBraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/VideoBraille/braille.h b/Drivers/Braille/VideoBraille/braille.h index e268d5c9..4528fdf8 100644 --- a/Drivers/Braille/VideoBraille/braille.h +++ b/Drivers/Braille/VideoBraille/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Virtual/Makefile.in b/Drivers/Braille/Virtual/Makefile.in index d83cb80a..94e5b66c 100644 --- a/Drivers/Braille/Virtual/Makefile.in +++ b/Drivers/Braille/Virtual/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Virtual/braille.c b/Drivers/Braille/Virtual/braille.c index e5647cff..db2604d3 100644 --- a/Drivers/Braille/Virtual/braille.c +++ b/Drivers/Braille/Virtual/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -57,7 +57,6 @@ #include "log.h" #include "io_misc.h" -#include "device.h" #include "parse.h" #include "async_wait.h" #include "charset.h" @@ -958,7 +957,7 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { inputEnd = 0; outputLength = 0; - if (isQualifiedDevice(&device, "client")) { + if (hasQualifier(&device, "client")) { static const ModeEntry clientModeEntry = { #ifdef AF_LOCAL requestLocalConnection, @@ -971,7 +970,7 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { requestInetConnection }; mode = &clientModeEntry; - } else if (isQualifiedDevice(&device, "server")) { + } else if (hasQualifier(&device, "server")) { static const ModeEntry serverModeEntry = { #ifdef AF_LOCAL acceptLocalConnection, @@ -985,7 +984,7 @@ brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { }; mode = &serverModeEntry; } else { - unsupportedDevice(device); + unsupportedDeviceIdentifier(device); goto failed; } if (!*device) device = VR_DEFAULT_SOCKET; diff --git a/Drivers/Braille/Virtual/braille.h b/Drivers/Braille/Virtual/braille.h index e540221e..c0cb413f 100644 --- a/Drivers/Braille/Virtual/braille.h +++ b/Drivers/Braille/Virtual/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Virtual/reldeps.mk b/Drivers/Braille/Virtual/reldeps.mk index 8ef88157..3c99b057 100644 --- a/Drivers/Braille/Virtual/reldeps.mk +++ b/Drivers/Braille/Virtual/reldeps.mk @@ -7,7 +7,6 @@ braille.$O: $(SRC_TOP)Headers/system_windows.h braille.$O: $(SRC_TOP)Headers/log.h braille.$O: $(SRC_TOP)Headers/get_sockets.h braille.$O: $(SRC_TOP)Headers/io_misc.h -braille.$O: $(SRC_TOP)Headers/device.h braille.$O: $(SRC_TOP)Headers/parse.h braille.$O: $(SRC_TOP)Headers/async.h braille.$O: $(SRC_TOP)Headers/async_wait.h diff --git a/Drivers/Braille/VisioBraille/Makefile.in b/Drivers/Braille/VisioBraille/Makefile.in index 5cadf89f..1429f8ea 100644 --- a/Drivers/Braille/VisioBraille/Makefile.in +++ b/Drivers/Braille/VisioBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/VisioBraille/braille.c b/Drivers/Braille/VisioBraille/braille.c index 004e22a6..16f02aa1 100644 --- a/Drivers/Braille/VisioBraille/braille.c +++ b/Drivers/Braille/VisioBraille/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -199,8 +199,8 @@ static int brl_construct(BrailleDisplay *brl, char **parameters, const char *dev } } - if (!isSerialDevice(&device)) { - unsupportedDevice(device); + if (!isSerialDeviceIdentifier(&device)) { + unsupportedDeviceIdentifier(device); return 0; } if (!(serialDevice = serialOpenDevice(device))) return 0; diff --git a/Drivers/Braille/VisioBraille/braille.h b/Drivers/Braille/VisioBraille/braille.h index ee95bd51..9f278415 100644 --- a/Drivers/Braille/VisioBraille/braille.h +++ b/Drivers/Braille/VisioBraille/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/VisioBraille/brl-out.h b/Drivers/Braille/VisioBraille/brl-out.h index 92f1435c..8ae49360 100644 --- a/Drivers/Braille/VisioBraille/brl-out.h +++ b/Drivers/Braille/VisioBraille/brl-out.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/VisioBraille/brldefs-vs.h b/Drivers/Braille/VisioBraille/brldefs-vs.h index 7bd95ee0..1ae4358d 100644 --- a/Drivers/Braille/VisioBraille/brldefs-vs.h +++ b/Drivers/Braille/VisioBraille/brldefs-vs.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/VisioBraille/vstp.h b/Drivers/Braille/VisioBraille/vstp.h index 25e916e3..be643547 100644 --- a/Drivers/Braille/VisioBraille/vstp.h +++ b/Drivers/Braille/VisioBraille/vstp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2017 S&S + * Copyright (C) 2006-2018 S&S * Samuel Thibault * Sébastien Hinderer * diff --git a/Drivers/Braille/VisioBraille/vstp_main.c b/Drivers/Braille/VisioBraille/vstp_main.c index 57029c0f..bef484d2 100644 --- a/Drivers/Braille/VisioBraille/vstp_main.c +++ b/Drivers/Braille/VisioBraille/vstp_main.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2017 S&S + * Copyright (C) 2006-2018 S&S * Samuel Thibault * Sébastien Hinderer * diff --git a/Drivers/Braille/VisioBraille/vstp_transfer.c b/Drivers/Braille/VisioBraille/vstp_transfer.c index e950b95d..967cf50c 100644 --- a/Drivers/Braille/VisioBraille/vstp_transfer.c +++ b/Drivers/Braille/VisioBraille/vstp_transfer.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2017 S&S + * Copyright (C) 2006-2018 S&S * Samuel Thibault * Sébastien Hinderer * diff --git a/Drivers/Braille/Voyager/Makefile.in b/Drivers/Braille/Voyager/Makefile.in index a02c9545..ed64bcd6 100644 --- a/Drivers/Braille/Voyager/Makefile.in +++ b/Drivers/Braille/Voyager/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/Voyager/braille.c b/Drivers/Braille/Voyager/braille.c index 1b0a7d63..23c908f6 100644 --- a/Drivers/Braille/Voyager/braille.c +++ b/Drivers/Braille/Voyager/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Braille/Voyager/brldefs-vo.h b/Drivers/Braille/Voyager/brldefs-vo.h index 6c08b8c8..6e97ca4b 100644 --- a/Drivers/Braille/Voyager/brldefs-vo.h +++ b/Drivers/Braille/Voyager/brldefs-vo.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Braille/XWindow/Makefile.in b/Drivers/Braille/XWindow/Makefile.in index d03fc1d7..771ab54f 100644 --- a/Drivers/Braille/XWindow/Makefile.in +++ b/Drivers/Braille/XWindow/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Braille/XWindow/README b/Drivers/Braille/XWindow/README index 03c1bd8b..5ca9fa68 100644 --- a/Drivers/Braille/XWindow/README +++ b/Drivers/Braille/XWindow/README @@ -1,9 +1,15 @@ +Description +=========== + This driver lets use a Graphical User Interface as BrlTTY device: it behaves just like a real braille device, its cost excepted :) It is mostly intended for sighted developers who don't have access to a real device, but still want to have an idea of the accessiblity of their application. +How to run basically +==================== + Assuming you're under X, first launch brltty: $ brltty -b xw -x as -A auth=none @@ -20,12 +26,38 @@ will show up most of VisioBraille device's keys. You should configure your window manager not to let the BRLTTY window get keyboard focus, so as to be able to simulate keypresses by pressing buttons. -Or you may use the -display tkparameter option to display the emulated device -on another X server and add the input=on option so that keypresses in the -device window will get simulated in the original display. -*** Don't set input=on without using -display too on a different display, -because else emulated keypresses will just loop ! *** +Redirecting the output +====================== + +The output of this virtual braille device can be shown on another computer, by +redirecting the X output. Let's say you will run brltty on "mycomputer", with +the output on "othercomputer". First you have to let mycomputer connect to +othercomputer's X server: + +othercomputer$ xhost +mycomputer + +And then you can start brltty on mycomputer: + +mycomputer$ DISPLAY=othercomputer:0 brltty -b xw -B input=on + +More fine-grain access control can be achieved by using xauth. + +Another way, which might be easier depending on your configuration, is to +forward X through ssh: + +othercomputer$ ssh -X mycomputer +mycomputer$ brltty -b xw -B input=on + + +The input=on option makes the keypresses in the device window get simulated +on mycomputer, just like a real braille device. + +*** Don't set input=on without using DISPLAY with a different display, +because otherwise emulated keypresses will just loop ! *** + +Braille cells +============= If you want braille display as well, you'll need the ClearlyU font (included in recent xfonts-base packages) and a UTF-8 locale for @@ -34,6 +66,6 @@ prepended LC_CTYPE: LC_CTYPE=en_US.UTF-8 brltty ... -In order to use this driver on Windows, you need to copy the file UBraille.ttf -into the C:\Windows\Fonts\ folder. It can be found in this directory as well as -in the Fonts\ top-level folder of BRLTTY's Windows installed files hierarchy. +On windows, you need to copy the file UBraille.ttf into the C:\Windows\Fonts\ +folder. It can be found in this directory as well as in the Fonts\ top-level +folder of BRLTTY's Windows installed files hierarchy. diff --git a/Drivers/Braille/XWindow/braille.c b/Drivers/Braille/XWindow/braille.c index 56398404..23857725 100644 --- a/Drivers/Braille/XWindow/braille.c +++ b/Drivers/Braille/XWindow/braille.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -206,7 +206,7 @@ typedef enum { #include "braille.h" #define MAXLINES 3 -#define MAXCOLS 80 +#define MAXCOLS 88 #define WHOLESIZE (MAXLINES * MAXCOLS) static int cols,lines; static int input; diff --git a/Drivers/Braille/XWindow/braille.h b/Drivers/Braille/XWindow/braille.h index 8e63ff90..df1860be 100644 --- a/Drivers/Braille/XWindow/braille.h +++ b/Drivers/Braille/XWindow/braille.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/BrlAPI/WindowEyes/Makefile.in b/Drivers/BrlAPI/WindowEyes/Makefile.in index b0c25296..86979d5b 100644 --- a/Drivers/BrlAPI/WindowEyes/Makefile.in +++ b/Drivers/BrlAPI/WindowEyes/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/BrlAPI/WindowEyes/test.c b/Drivers/BrlAPI/WindowEyes/test.c index 7b4f8329..a46c21bd 100644 --- a/Drivers/BrlAPI/WindowEyes/test.c +++ b/Drivers/BrlAPI/WindowEyes/test.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 2009-2017 by The BRLTTY Developers. + * Copyright (C) 2009-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/BrlAPI/WindowEyes/webrloem.c b/Drivers/BrlAPI/WindowEyes/webrloem.c index 4d083104..e21e1d79 100644 --- a/Drivers/BrlAPI/WindowEyes/webrloem.c +++ b/Drivers/BrlAPI/WindowEyes/webrloem.c @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/BrlAPI/WindowEyes/webrloem.h b/Drivers/BrlAPI/WindowEyes/webrloem.h index c018d498..d28e0ac1 100644 --- a/Drivers/BrlAPI/WindowEyes/webrloem.h +++ b/Drivers/BrlAPI/WindowEyes/webrloem.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Drivers/Screen/Android/Makefile.in b/Drivers/Screen/Android/Makefile.in index 8442819c..db7f8ed1 100644 --- a/Drivers/Screen/Android/Makefile.in +++ b/Drivers/Screen/Android/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/Android/screen.c b/Drivers/Screen/Android/screen.c index f07d873c..09f676b2 100644 --- a/Drivers/Screen/Android/screen.c +++ b/Drivers/Screen/Android/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/AtSpi/Makefile.in b/Drivers/Screen/AtSpi/Makefile.in index e9ecf399..db01424d 100644 --- a/Drivers/Screen/AtSpi/Makefile.in +++ b/Drivers/Screen/AtSpi/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/AtSpi/screen.c b/Drivers/Screen/AtSpi/screen.c index 16fb0634..f1cbaec4 100644 --- a/Drivers/Screen/AtSpi/screen.c +++ b/Drivers/Screen/AtSpi/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/AtSpi2/Makefile.in b/Drivers/Screen/AtSpi2/Makefile.in index 75e208bd..b80b44bf 100644 --- a/Drivers/Screen/AtSpi2/Makefile.in +++ b/Drivers/Screen/AtSpi2/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/AtSpi2/screen.c b/Drivers/Screen/AtSpi2/screen.c index 3624d8ff..ee98c657 100644 --- a/Drivers/Screen/AtSpi2/screen.c +++ b/Drivers/Screen/AtSpi2/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -720,15 +720,19 @@ static int recurseFindTerm(const char *sender, const char *path, int active, int dbus_message_iter_recurse (&iter, &iter_array); while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID) { - const char *sender, *path; + const char *childsender, *childpath; dbus_message_iter_recurse (&iter_array, &iter_struct); - dbus_message_iter_get_basic (&iter_struct, &sender); + dbus_message_iter_get_basic (&iter_struct, &childsender); dbus_message_iter_next (&iter_struct); - dbus_message_iter_get_basic (&iter_struct, &path); - if (findTerm(sender, path, active, depth)) + dbus_message_iter_get_basic (&iter_struct, &childpath); + /* Make sure that the child is not the same as the parent, to avoid recursing indefinitely. */ + if (strcmp(path, childpath)) { - res = 1; - goto out; + if (findTerm(childsender, childpath, active, depth)) + { + res = 1; + goto out; + } } dbus_message_iter_next (&iter_array); } @@ -1089,7 +1093,7 @@ ASYNC_ALARM_CALLBACK(a2ProcessTimeout) a2Timeout->monitor = NULL; if (dbus_timeout_get_enabled(timeout)) /* Still enabled, requeue it */ - asyncSetAlarmIn(&a2Timeout->monitor, dbus_timeout_get_interval(timeout), a2ProcessTimeout, a2Timeout); + asyncNewRelativeAlarm(&a2Timeout->monitor, dbus_timeout_get_interval(timeout), a2ProcessTimeout, a2Timeout); } dbus_bool_t a2AddTimeout(DBusTimeout *timeout, void *data) @@ -1097,7 +1101,7 @@ dbus_bool_t a2AddTimeout(DBusTimeout *timeout, void *data) struct a2Timeout *a2Timeout = calloc(1, sizeof(*a2Timeout)); a2Timeout->timeout = timeout; if (dbus_timeout_get_enabled(timeout)) - asyncSetAlarmIn(&a2Timeout->monitor, dbus_timeout_get_interval(timeout), a2ProcessTimeout, a2Timeout); + asyncNewRelativeAlarm(&a2Timeout->monitor, dbus_timeout_get_interval(timeout), a2ProcessTimeout, a2Timeout); dbus_timeout_set_data(timeout, a2Timeout, NULL); return TRUE; } diff --git a/Drivers/Screen/Grub/Makefile.in b/Drivers/Screen/Grub/Makefile.in index 2b3cc9f7..d362e5fd 100644 --- a/Drivers/Screen/Grub/Makefile.in +++ b/Drivers/Screen/Grub/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/Grub/screen.c b/Drivers/Screen/Grub/screen.c index d8c7c15e..916b7969 100644 --- a/Drivers/Screen/Grub/screen.c +++ b/Drivers/Screen/Grub/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Hurd/Makefile.in b/Drivers/Screen/Hurd/Makefile.in index 71cdbdea..b253e3fc 100644 --- a/Drivers/Screen/Hurd/Makefile.in +++ b/Drivers/Screen/Hurd/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/Hurd/screen.c b/Drivers/Screen/Hurd/screen.c index ed05daba..d9a9d46d 100644 --- a/Drivers/Screen/Hurd/screen.c +++ b/Drivers/Screen/Hurd/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Hurd/screen.h b/Drivers/Screen/Hurd/screen.h index c15ddae0..4ea4d97a 100644 --- a/Drivers/Screen/Hurd/screen.h +++ b/Drivers/Screen/Hurd/screen.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Linux/Makefile.in b/Drivers/Screen/Linux/Makefile.in index ed3352a1..50dcb858 100644 --- a/Drivers/Screen/Linux/Makefile.in +++ b/Drivers/Screen/Linux/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/Linux/screen.c b/Drivers/Screen/Linux/screen.c index 54a507fd..9e999b5e 100644 --- a/Drivers/Screen/Linux/screen.c +++ b/Drivers/Screen/Linux/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Linux/screen.h b/Drivers/Screen/Linux/screen.h index 46241eaa..0550f3d3 100644 --- a/Drivers/Screen/Linux/screen.h +++ b/Drivers/Screen/Linux/screen.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/PcBios/Makefile.in b/Drivers/Screen/PcBios/Makefile.in index 6e262e9c..ebb5dd7e 100644 --- a/Drivers/Screen/PcBios/Makefile.in +++ b/Drivers/Screen/PcBios/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/PcBios/screen.c b/Drivers/Screen/PcBios/screen.c index d96ef767..91632d15 100644 --- a/Drivers/Screen/PcBios/screen.c +++ b/Drivers/Screen/PcBios/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Screen/Makefile.in b/Drivers/Screen/Screen/Makefile.in index 80d6b1c8..4915e722 100644 --- a/Drivers/Screen/Screen/Makefile.in +++ b/Drivers/Screen/Screen/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/Screen/screen.c b/Drivers/Screen/Screen/screen.c index d5cf90d4..50b158db 100644 --- a/Drivers/Screen/Screen/screen.c +++ b/Drivers/Screen/Screen/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Screen/screen.h b/Drivers/Screen/Screen/screen.h index fca02e44..2bd0644e 100644 --- a/Drivers/Screen/Screen/screen.h +++ b/Drivers/Screen/Screen/screen.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Skeleton/Makefile.in b/Drivers/Screen/Skeleton/Makefile.in index b08e3290..cfc7465d 100644 --- a/Drivers/Screen/Skeleton/Makefile.in +++ b/Drivers/Screen/Skeleton/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/Skeleton/screen.c b/Drivers/Screen/Skeleton/screen.c index d8c7c15e..916b7969 100644 --- a/Drivers/Screen/Skeleton/screen.c +++ b/Drivers/Screen/Skeleton/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Screen/Windows/Makefile.in b/Drivers/Screen/Windows/Makefile.in index d891877a..dd1dd8c8 100644 --- a/Drivers/Screen/Windows/Makefile.in +++ b/Drivers/Screen/Windows/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Screen/Windows/screen.c b/Drivers/Screen/Windows/screen.c index 89916a77..2da0815b 100644 --- a/Drivers/Screen/Windows/screen.c +++ b/Drivers/Screen/Windows/screen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Alva/Makefile.in b/Drivers/Speech/Alva/Makefile.in index a4485ef1..8ab38a1c 100644 --- a/Drivers/Speech/Alva/Makefile.in +++ b/Drivers/Speech/Alva/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/Alva/speech.c b/Drivers/Speech/Alva/speech.c index c4e03993..516a5420 100644 --- a/Drivers/Speech/Alva/speech.c +++ b/Drivers/Speech/Alva/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Alva/speech.h b/Drivers/Speech/Alva/speech.h index 6b92d480..a9e8fd4d 100644 --- a/Drivers/Speech/Alva/speech.h +++ b/Drivers/Speech/Alva/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Android/Makefile.in b/Drivers/Speech/Android/Makefile.in index c3066d15..91c76e79 100644 --- a/Drivers/Speech/Android/Makefile.in +++ b/Drivers/Speech/Android/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/Android/speech.c b/Drivers/Speech/Android/speech.c index fbda6480..e42d02dd 100644 --- a/Drivers/Speech/Android/speech.c +++ b/Drivers/Speech/Android/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/BrailleLite/Makefile.in b/Drivers/Speech/BrailleLite/Makefile.in index 883aad43..8aeb87d1 100644 --- a/Drivers/Speech/BrailleLite/Makefile.in +++ b/Drivers/Speech/BrailleLite/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/BrailleLite/speech.c b/Drivers/Speech/BrailleLite/speech.c index 79f7d083..55747aff 100644 --- a/Drivers/Speech/BrailleLite/speech.c +++ b/Drivers/Speech/BrailleLite/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/BrailleLite/speech.h b/Drivers/Speech/BrailleLite/speech.h index 66266a22..a336d4d0 100644 --- a/Drivers/Speech/BrailleLite/speech.h +++ b/Drivers/Speech/BrailleLite/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/CombiBraille/Makefile.in b/Drivers/Speech/CombiBraille/Makefile.in index 75aa0493..9f029622 100644 --- a/Drivers/Speech/CombiBraille/Makefile.in +++ b/Drivers/Speech/CombiBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/CombiBraille/speech.c b/Drivers/Speech/CombiBraille/speech.c index 7048fa19..d421180c 100644 --- a/Drivers/Speech/CombiBraille/speech.c +++ b/Drivers/Speech/CombiBraille/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/CombiBraille/speech.h b/Drivers/Speech/CombiBraille/speech.h index 03e3a22b..b9b7799a 100644 --- a/Drivers/Speech/CombiBraille/speech.h +++ b/Drivers/Speech/CombiBraille/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/ExternalSpeech/Makefile.in b/Drivers/Speech/ExternalSpeech/Makefile.in index ac3e49e4..13c8940e 100644 --- a/Drivers/Speech/ExternalSpeech/Makefile.in +++ b/Drivers/Speech/ExternalSpeech/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/ExternalSpeech/speech.c b/Drivers/Speech/ExternalSpeech/speech.c index 9f749e29..aadeeb86 100644 --- a/Drivers/Speech/ExternalSpeech/speech.c +++ b/Drivers/Speech/ExternalSpeech/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/ExternalSpeech/speech.h b/Drivers/Speech/ExternalSpeech/speech.h index 9845fa37..fb353dae 100644 --- a/Drivers/Speech/ExternalSpeech/speech.h +++ b/Drivers/Speech/ExternalSpeech/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Festival/Makefile.in b/Drivers/Speech/Festival/Makefile.in index d99757d8..cd4f6d53 100644 --- a/Drivers/Speech/Festival/Makefile.in +++ b/Drivers/Speech/Festival/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/Festival/speech.c b/Drivers/Speech/Festival/speech.c index 7c445322..2a6fd58f 100644 --- a/Drivers/Speech/Festival/speech.c +++ b/Drivers/Speech/Festival/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Festival/speech.h b/Drivers/Speech/Festival/speech.h index 2f26053b..0b76ce02 100644 --- a/Drivers/Speech/Festival/speech.h +++ b/Drivers/Speech/Festival/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/FestivalLite/Makefile.in b/Drivers/Speech/FestivalLite/Makefile.in index fcfff03a..f9c4d7da 100644 --- a/Drivers/Speech/FestivalLite/Makefile.in +++ b/Drivers/Speech/FestivalLite/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/FestivalLite/speech.c b/Drivers/Speech/FestivalLite/speech.c index fc74d9a1..f18bc519 100644 --- a/Drivers/Speech/FestivalLite/speech.c +++ b/Drivers/Speech/FestivalLite/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/GenericSay/Makefile.in b/Drivers/Speech/GenericSay/Makefile.in index 52b4c8b6..098a42b4 100644 --- a/Drivers/Speech/GenericSay/Makefile.in +++ b/Drivers/Speech/GenericSay/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/GenericSay/commands/AccentSA b/Drivers/Speech/GenericSay/commands/AccentSA index aa3963b5..ea40aa8d 100755 --- a/Drivers/Speech/GenericSay/commands/AccentSA +++ b/Drivers/Speech/GenericSay/commands/AccentSA @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/GenericSay/commands/say b/Drivers/Speech/GenericSay/commands/say index 1da75e31..dfc6cc1d 100755 --- a/Drivers/Speech/GenericSay/commands/say +++ b/Drivers/Speech/GenericSay/commands/say @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/GenericSay/speech.c b/Drivers/Speech/GenericSay/speech.c index b84929b6..8a4db0d9 100644 --- a/Drivers/Speech/GenericSay/speech.c +++ b/Drivers/Speech/GenericSay/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/GenericSay/speech.h b/Drivers/Speech/GenericSay/speech.h index a66c3575..d99d5e8c 100644 --- a/Drivers/Speech/GenericSay/speech.h +++ b/Drivers/Speech/GenericSay/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Mikropuhe/Makefile.in b/Drivers/Speech/Mikropuhe/Makefile.in index e9e0ef22..3b5980d6 100644 --- a/Drivers/Speech/Mikropuhe/Makefile.in +++ b/Drivers/Speech/Mikropuhe/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/Mikropuhe/speech.c b/Drivers/Speech/Mikropuhe/speech.c index 65d68a9f..c3189478 100644 --- a/Drivers/Speech/Mikropuhe/speech.c +++ b/Drivers/Speech/Mikropuhe/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/MultiBraille/Makefile.in b/Drivers/Speech/MultiBraille/Makefile.in index aaa9aa9a..72b1145c 100644 --- a/Drivers/Speech/MultiBraille/Makefile.in +++ b/Drivers/Speech/MultiBraille/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/MultiBraille/speech.c b/Drivers/Speech/MultiBraille/speech.c index 93289aa8..c200b066 100644 --- a/Drivers/Speech/MultiBraille/speech.c +++ b/Drivers/Speech/MultiBraille/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/MultiBraille/speech.h b/Drivers/Speech/MultiBraille/speech.h index 3ef9f383..9767e457 100644 --- a/Drivers/Speech/MultiBraille/speech.h +++ b/Drivers/Speech/MultiBraille/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Skeleton/Makefile.in b/Drivers/Speech/Skeleton/Makefile.in index df2f9145..426f33f8 100644 --- a/Drivers/Speech/Skeleton/Makefile.in +++ b/Drivers/Speech/Skeleton/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/Skeleton/speech.c b/Drivers/Speech/Skeleton/speech.c index 6eba4f2f..0b8fc35a 100644 --- a/Drivers/Speech/Skeleton/speech.c +++ b/Drivers/Speech/Skeleton/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/SpeechDispatcher/Makefile.in b/Drivers/Speech/SpeechDispatcher/Makefile.in index 2c354488..2a983c2b 100644 --- a/Drivers/Speech/SpeechDispatcher/Makefile.in +++ b/Drivers/Speech/SpeechDispatcher/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/SpeechDispatcher/speech.c b/Drivers/Speech/SpeechDispatcher/speech.c index 8158b721..927a0ab3 100644 --- a/Drivers/Speech/SpeechDispatcher/speech.c +++ b/Drivers/Speech/SpeechDispatcher/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Swift/Makefile.in b/Drivers/Speech/Swift/Makefile.in index 3c95f526..617034aa 100644 --- a/Drivers/Speech/Swift/Makefile.in +++ b/Drivers/Speech/Swift/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/Swift/speech.c b/Drivers/Speech/Swift/speech.c index 4c9dde12..8af83613 100644 --- a/Drivers/Speech/Swift/speech.c +++ b/Drivers/Speech/Swift/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/Theta/Makefile.in b/Drivers/Speech/Theta/Makefile.in index 5e23ec3f..e8e192c8 100644 --- a/Drivers/Speech/Theta/Makefile.in +++ b/Drivers/Speech/Theta/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/Theta/speech.c b/Drivers/Speech/Theta/speech.c index 8dbfd366..0fe47599 100644 --- a/Drivers/Speech/Theta/speech.c +++ b/Drivers/Speech/Theta/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/ViaVoice/Makefile.in b/Drivers/Speech/ViaVoice/Makefile.in index e6011ffa..cc62a36c 100644 --- a/Drivers/Speech/ViaVoice/Makefile.in +++ b/Drivers/Speech/ViaVoice/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/ViaVoice/speech.c b/Drivers/Speech/ViaVoice/speech.c index a7403a99..6817abb9 100644 --- a/Drivers/Speech/ViaVoice/speech.c +++ b/Drivers/Speech/ViaVoice/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/ViaVoice/speech.h b/Drivers/Speech/ViaVoice/speech.h index 26297488..8e40ae66 100644 --- a/Drivers/Speech/ViaVoice/speech.h +++ b/Drivers/Speech/ViaVoice/speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Drivers/Speech/eSpeak/Makefile.in b/Drivers/Speech/eSpeak/Makefile.in index e2b2b5ff..d937afb5 100644 --- a/Drivers/Speech/eSpeak/Makefile.in +++ b/Drivers/Speech/eSpeak/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Drivers/Speech/eSpeak/speech.c b/Drivers/Speech/eSpeak/speech.c index 6c303c75..bf7b8b39 100644 --- a/Drivers/Speech/eSpeak/speech.c +++ b/Drivers/Speech/eSpeak/speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/addresses.h b/Headers/addresses.h index 9e31b1ec..9648573f 100644 --- a/Headers/addresses.h +++ b/Headers/addresses.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/alert.h b/Headers/alert.h index f92cef6e..e519f117 100644 --- a/Headers/alert.h +++ b/Headers/alert.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -66,6 +66,8 @@ typedef enum { ALERT_CONSOLE_BELL, ALERT_KEYS_AUTORELEASED, + + ALERT_SCROLL_UP, } AlertIdentifier; extern void alert (AlertIdentifier identifier); diff --git a/Headers/api_types.h b/Headers/api_types.h index 062a9f14..badb18c0 100644 --- a/Headers/api_types.h +++ b/Headers/api_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/ascii.h b/Headers/ascii.h index 2bf9e051..fd893744 100644 --- a/Headers/ascii.h +++ b/Headers/ascii.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/async.h b/Headers/async.h index 0dd399ec..ec7ede51 100644 --- a/Headers/async.h +++ b/Headers/async.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/async_alarm.h b/Headers/async_alarm.h index 26f3b993..5e28faa3 100644 --- a/Headers/async_alarm.h +++ b/Headers/async_alarm.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -34,23 +34,23 @@ typedef struct { #define ASYNC_ALARM_CALLBACK(name) void name (const AsyncAlarmCallbackParameters *parameters) typedef ASYNC_ALARM_CALLBACK(AsyncAlarmCallback); -extern int asyncSetAlarmTo ( +extern int asyncNewAbsoluteAlarm ( AsyncHandle *handle, const TimeValue *time, AsyncAlarmCallback *callback, void *data ); -extern int asyncSetAlarmIn ( +extern int asyncNewRelativeAlarm ( AsyncHandle *handle, - int interval, + int milliseconds, AsyncAlarmCallback *callback, void *data ); extern int asyncResetAlarmTo (AsyncHandle handle, const TimeValue *time); -extern int asyncResetAlarmIn (AsyncHandle handle, int interval); -extern int asyncResetAlarmEvery (AsyncHandle handle, int interval); +extern int asyncResetAlarmIn (AsyncHandle handle, int milliseconds); +extern int asyncResetAlarmEvery (AsyncHandle handle, int milliseconds); #ifdef __cplusplus } diff --git a/Headers/async_event.h b/Headers/async_event.h index 64b8e0bf..180d4fa4 100644 --- a/Headers/async_event.h +++ b/Headers/async_event.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/async_io.h b/Headers/async_io.h index 9a3b3a4c..7b56f0a7 100644 --- a/Headers/async_io.h +++ b/Headers/async_io.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/async_signal.h b/Headers/async_signal.h index a882e2bc..9b028224 100644 --- a/Headers/async_signal.h +++ b/Headers/async_signal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/async_task.h b/Headers/async_task.h index c2751201..0e64d34d 100644 --- a/Headers/async_task.h +++ b/Headers/async_task.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/async_wait.h b/Headers/async_wait.h index 88c11d9b..a182f7b2 100644 --- a/Headers/async_wait.h +++ b/Headers/async_wait.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/atb.h b/Headers/atb.h index 3ed0fe48..f91f64e2 100644 --- a/Headers/atb.h +++ b/Headers/atb.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/auth.h b/Headers/auth.h index 4e8224be..c31aac57 100644 --- a/Headers/auth.h +++ b/Headers/auth.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/beep.h b/Headers/beep.h index 4418d242..bfc3f089 100644 --- a/Headers/beep.h +++ b/Headers/beep.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/bell.h b/Headers/bell.h index d88d300c..4ffa0d57 100644 --- a/Headers/bell.h +++ b/Headers/bell.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/bitfield.h b/Headers/bitfield.h index 5d61c1ab..8cdf2a3c 100644 --- a/Headers/bitfield.h +++ b/Headers/bitfield.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/bitmask.h b/Headers/bitmask.h index 8453d8da..7f63a510 100644 --- a/Headers/bitmask.h +++ b/Headers/bitmask.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/brl_base.h b/Headers/brl_base.h index c1b0e03e..a798d7e8 100644 --- a/Headers/brl_base.h +++ b/Headers/brl_base.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/brl_cmds.h b/Headers/brl_cmds.h index f44f539b..ede24df8 100644 --- a/Headers/brl_cmds.h +++ b/Headers/brl_cmds.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/brl_custom.h b/Headers/brl_custom.h index 5aadb4f3..74f0aacf 100644 --- a/Headers/brl_custom.h +++ b/Headers/brl_custom.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/brl_dots.h b/Headers/brl_dots.h index a7703f8f..cac7c788 100644 --- a/Headers/brl_dots.h +++ b/Headers/brl_dots.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/brl_driver.h b/Headers/brl_driver.h index f1af6f0e..362896db 100644 --- a/Headers/brl_driver.h +++ b/Headers/brl_driver.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/brl_types.h b/Headers/brl_types.h index e7ac6ca3..bb3a0fa2 100644 --- a/Headers/brl_types.h +++ b/Headers/brl_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/brl_utils.h b/Headers/brl_utils.h index 9c9c0cd3..bd0d8d4b 100644 --- a/Headers/brl_utils.h +++ b/Headers/brl_utils.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/charset.h b/Headers/charset.h index 6071b535..bdddc002 100644 --- a/Headers/charset.h +++ b/Headers/charset.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/cmd.h b/Headers/cmd.h index 08790dc7..1930a8a6 100644 --- a/Headers/cmd.h +++ b/Headers/cmd.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/cmd_enqueue.h b/Headers/cmd_enqueue.h index b529ede8..15145f84 100644 --- a/Headers/cmd_enqueue.h +++ b/Headers/cmd_enqueue.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/cmd_types.h b/Headers/cmd_types.h index f929e392..9393cedb 100644 --- a/Headers/cmd_types.h +++ b/Headers/cmd_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/ctb.h b/Headers/ctb.h index 8a81e32b..176e4c61 100644 --- a/Headers/ctb.h +++ b/Headers/ctb.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/ctb_types.h b/Headers/ctb_types.h index e19ea252..29647b4f 100644 --- a/Headers/ctb_types.h +++ b/Headers/ctb_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/dataarea.h b/Headers/dataarea.h index 9c3d5d6e..99d29512 100644 --- a/Headers/dataarea.h +++ b/Headers/dataarea.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/datafile.h b/Headers/datafile.h index 20e54777..f22457eb 100644 --- a/Headers/datafile.h +++ b/Headers/datafile.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/device.h b/Headers/device.h index 3698a7d3..bb051269 100644 --- a/Headers/device.h +++ b/Headers/device.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -36,9 +36,6 @@ extern char *getDevicePath (const char *device); extern const char *resolveDeviceName (const char *const *names, const char *description); #define DEVICE_PARAMETER_SEPARATOR '+' - -extern int isQualifiedDevice (const char **identifier, const char *qualifier); -extern int isUnqualifiedDevice (const char *identifier); extern char **getDeviceParameters (const char *const *names, const char *identifier); #undef ALLOW_DOS_DEVICE_NAMES diff --git a/Headers/driver.h b/Headers/driver.h index 5cf49a48..630611cf 100644 --- a/Headers/driver.h +++ b/Headers/driver.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -48,7 +48,7 @@ typedef struct { #define DRIVER_VERSION_STRING PACKAGE_VERSION #define DRIVER_VERSION_DECLARATION(type) const char CONCATENATE(type##_version_,DRIVER_CODE)[] = DRIVER_VERSION_STRING -extern void unsupportedDevice (const char *identifier); +extern void unsupportedDeviceIdentifier (const char *identifier); extern void logOutputPacket (const void *packet, size_t size); extern void logInputPacket (const void *packet, size_t size); diff --git a/Headers/drivers.h b/Headers/drivers.h index 98e988ec..e9117db8 100644 --- a/Headers/drivers.h +++ b/Headers/drivers.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/dynld.h b/Headers/dynld.h index ef9eda6a..0b388d65 100644 --- a/Headers/dynld.h +++ b/Headers/dynld.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/embed.h b/Headers/embed.h index bfb82923..d45c911b 100644 --- a/Headers/embed.h +++ b/Headers/embed.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/file.h b/Headers/file.h index 1f6981e7..b12498f5 100644 --- a/Headers/file.h +++ b/Headers/file.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/fm.h b/Headers/fm.h index 8e8ae248..6cd811c0 100644 --- a/Headers/fm.h +++ b/Headers/fm.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/fm_adlib.h b/Headers/fm_adlib.h index 0a156d42..1d08bdc3 100644 --- a/Headers/fm_adlib.h +++ b/Headers/fm_adlib.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/get_curses.h b/Headers/get_curses.h index 9862f27a..df4cef11 100644 --- a/Headers/get_curses.h +++ b/Headers/get_curses.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/get_pthreads.h b/Headers/get_pthreads.h index bc457cc4..09ae3632 100644 --- a/Headers/get_pthreads.h +++ b/Headers/get_pthreads.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/get_select.h b/Headers/get_select.h index fa383f47..20daa052 100644 --- a/Headers/get_select.h +++ b/Headers/get_select.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/get_sockets.h b/Headers/get_sockets.h index 7cb57175..1b750779 100644 --- a/Headers/get_sockets.h +++ b/Headers/get_sockets.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/gio_types.h b/Headers/gio_types.h index 11110d5c..5d75c2c9 100644 --- a/Headers/gio_types.h +++ b/Headers/gio_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/hostcmd.h b/Headers/hostcmd.h index 603e3f1b..fd7b233c 100644 --- a/Headers/hostcmd.h +++ b/Headers/hostcmd.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/io_bluetooth.h b/Headers/io_bluetooth.h index 86ed293a..2468458c 100644 --- a/Headers/io_bluetooth.h +++ b/Headers/io_bluetooth.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -58,7 +58,7 @@ extern ssize_t bthReadData ( extern ssize_t bthWriteData (BluetoothConnection *connection, const void *buffer, size_t size); -extern int isBluetoothDevice (const char **identifier); +extern int isBluetoothDeviceIdentifier (const char **identifier); #ifdef __cplusplus } diff --git a/Headers/io_generic.h b/Headers/io_generic.h index 12a8b3a6..c2a11246 100644 --- a/Headers/io_generic.h +++ b/Headers/io_generic.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/io_misc.h b/Headers/io_misc.h index f0c839fa..8e6c900c 100644 --- a/Headers/io_misc.h +++ b/Headers/io_misc.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/io_serial.h b/Headers/io_serial.h index 0b97541d..3bf2a15a 100644 --- a/Headers/io_serial.h +++ b/Headers/io_serial.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -30,7 +30,7 @@ extern "C" { typedef struct SerialDeviceStruct SerialDevice; -extern int isSerialDevice (const char **identifier); +extern int isSerialDeviceIdentifier (const char **identifier); extern int serialValidateBaud (unsigned int *baud, const char *description, const char *word, const unsigned int *choices); extern SerialDevice *serialOpenDevice (const char *identifier); diff --git a/Headers/io_usb.h b/Headers/io_usb.h index 39373da3..b3095590 100644 --- a/Headers/io_usb.h +++ b/Headers/io_usb.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -311,7 +311,7 @@ typedef struct { extern UsbChannel *usbOpenChannel (const UsbChannelDefinition *definitions, const char *identifier); extern void usbCloseChannel (UsbChannel *channel); -extern int isUsbDevice (const char **identifier); +extern int isUsbDeviceIdentifier (const char **identifier); #ifdef __cplusplus } diff --git a/Headers/kbd_keycodes.h b/Headers/kbd_keycodes.h index db3b6bdf..f7b247c6 100644 --- a/Headers/kbd_keycodes.h +++ b/Headers/kbd_keycodes.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/ktb.h b/Headers/ktb.h index 5253aa8e..dbc58738 100644 --- a/Headers/ktb.h +++ b/Headers/ktb.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/ktb_types.h b/Headers/ktb_types.h index dc70484a..9c1e9cef 100644 --- a/Headers/ktb_types.h +++ b/Headers/ktb_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/leds.h b/Headers/leds.h index d6066093..10e4915b 100644 --- a/Headers/leds.h +++ b/Headers/leds.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/lock.h b/Headers/lock.h index 62c88aef..c9b1758d 100644 --- a/Headers/lock.h +++ b/Headers/lock.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/log.h b/Headers/log.h index b22d2894..ed0e2e70 100644 --- a/Headers/log.h +++ b/Headers/log.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/log_history.h b/Headers/log_history.h index 049226f8..08d09820 100644 --- a/Headers/log_history.h +++ b/Headers/log_history.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/menu.h b/Headers/menu.h index 8130d4ca..0d938ba3 100644 --- a/Headers/menu.h +++ b/Headers/menu.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/message.h b/Headers/message.h index b584009a..36064b5a 100644 --- a/Headers/message.h +++ b/Headers/message.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/midi.h b/Headers/midi.h index a46be2fe..8b5b8a49 100644 --- a/Headers/midi.h +++ b/Headers/midi.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/mntfs.h b/Headers/mntfs.h index 2451f130..53f20bfa 100644 --- a/Headers/mntfs.h +++ b/Headers/mntfs.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/mntpt.h b/Headers/mntpt.h index d0f09b37..a7ac5c0c 100644 --- a/Headers/mntpt.h +++ b/Headers/mntpt.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/note_types.h b/Headers/note_types.h index 1c453ef4..a8ae0b63 100644 --- a/Headers/note_types.h +++ b/Headers/note_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/notes.h b/Headers/notes.h index 6fcf1297..935ef52e 100644 --- a/Headers/notes.h +++ b/Headers/notes.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/options.h b/Headers/options.h index 47daec83..21aaab32 100644 --- a/Headers/options.h +++ b/Headers/options.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/params.h b/Headers/params.h index 749bd96e..360ca07e 100644 --- a/Headers/params.h +++ b/Headers/params.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/parse.h b/Headers/parse.h index 5c49b330..7248d990 100644 --- a/Headers/parse.h +++ b/Headers/parse.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -85,10 +85,14 @@ extern int isFloat (float *value, const char *string); extern int validateFloat (float *value, const char *string, const float *minimum, const float *maximum); #endif /* NO_FLOAT */ +#define FILE_PATH_DELIMITER '/' #define PARAMETER_SEPARATOR_CHARACTER ',' #define PARAMETER_ASSIGNMENT_CHARACTER '=' #define PARAMETER_QUALIFIER_CHARACTER ':' +extern int hasQualifier (const char **identifier, const char *qualifier); +extern int hasNoQualifier (const char *identifier); + extern char **getParameters (const char *const *names, const char *qualifier, const char *parameters); extern void logParameters (const char *const *names, char **values, const char *description); diff --git a/Headers/pcm.h b/Headers/pcm.h index eca2f0e6..91e5b3f7 100644 --- a/Headers/pcm.h +++ b/Headers/pcm.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/pgmpath.h b/Headers/pgmpath.h index 9aa385ca..7cbc891b 100644 --- a/Headers/pgmpath.h +++ b/Headers/pgmpath.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/pid.h b/Headers/pid.h index 6e1d7c79..66ee74ea 100644 --- a/Headers/pid.h +++ b/Headers/pid.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/ports.h b/Headers/ports.h index cc58556f..0ae85267 100644 --- a/Headers/ports.h +++ b/Headers/ports.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/prefs.h b/Headers/prefs.h index 4b020a72..0415fcdb 100644 --- a/Headers/prefs.h +++ b/Headers/prefs.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -209,7 +209,10 @@ typedef struct { unsigned char autoreleaseTime; unsigned char touchNavigation; + + unsigned char wordWrap; unsigned char cursorTrackingDelay; + unsigned char trackScreenScroll; unsigned char saveOnExit; unsigned char showSubmenuSizes; diff --git a/Headers/program.h b/Headers/program.h index d1f11b15..8edb1484 100644 --- a/Headers/program.h +++ b/Headers/program.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/prologue.h b/Headers/prologue.h index 01018eb0..5c47538b 100644 --- a/Headers/prologue.h +++ b/Headers/prologue.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -23,7 +23,7 @@ extern "C" { #endif /* __cplusplus */ -#define PACKAGE_COPYRIGHT "Copyright (C) 1995-2017 by The BRLTTY Developers." +#define PACKAGE_COPYRIGHT "Copyright (C) 1995-2018 by The BRLTTY Developers." #undef HAVE_BUILTIN_POPCOUNT diff --git a/Headers/queue.h b/Headers/queue.h index cdfc9419..48e755fd 100644 --- a/Headers/queue.h +++ b/Headers/queue.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/report.h b/Headers/report.h index a661154e..e99db254 100644 --- a/Headers/report.h +++ b/Headers/report.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/revision.h b/Headers/revision.h index 6312aba9..890f1dbf 100644 --- a/Headers/revision.h +++ b/Headers/revision.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/scr_base.h b/Headers/scr_base.h index 7e483803..8a5efbce 100644 --- a/Headers/scr_base.h +++ b/Headers/scr_base.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/scr_driver.h b/Headers/scr_driver.h index ecb17d7e..2b1d452d 100644 --- a/Headers/scr_driver.h +++ b/Headers/scr_driver.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/scr_gpm.h b/Headers/scr_gpm.h index caa4f94f..3a16bb7f 100644 --- a/Headers/scr_gpm.h +++ b/Headers/scr_gpm.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/scr_main.h b/Headers/scr_main.h index 68a7e653..a08361c1 100644 --- a/Headers/scr_main.h +++ b/Headers/scr_main.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/scr_real.h b/Headers/scr_real.h index 9e930e5b..d6e0a0b0 100644 --- a/Headers/scr_real.h +++ b/Headers/scr_real.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/scr_types.h b/Headers/scr_types.h index f8d4b4f8..3be06503 100644 --- a/Headers/scr_types.h +++ b/Headers/scr_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/scr_utils.h b/Headers/scr_utils.h index 807ca65f..dd6895df 100644 --- a/Headers/scr_utils.h +++ b/Headers/scr_utils.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/serial_types.h b/Headers/serial_types.h index 9e01e3bb..d3164a9a 100644 --- a/Headers/serial_types.h +++ b/Headers/serial_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/service.h b/Headers/service.h index 337b777e..bbd23db3 100644 --- a/Headers/service.h +++ b/Headers/service.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/spk.h b/Headers/spk.h index 86441e2a..0167387b 100644 --- a/Headers/spk.h +++ b/Headers/spk.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/spk_base.h b/Headers/spk_base.h index 8370e4cf..50d10e6e 100644 --- a/Headers/spk_base.h +++ b/Headers/spk_base.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/spk_driver.h b/Headers/spk_driver.h index f91ded25..8fa5107b 100644 --- a/Headers/spk_driver.h +++ b/Headers/spk_driver.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/spk_types.h b/Headers/spk_types.h index 7a623640..50cf0c67 100644 --- a/Headers/spk_types.h +++ b/Headers/spk_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/status_types.h b/Headers/status_types.h index 91321686..f5fc4cca 100644 --- a/Headers/status_types.h +++ b/Headers/status_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/stdiox.h b/Headers/stdiox.h index efbbfd8d..1665cafb 100644 --- a/Headers/stdiox.h +++ b/Headers/stdiox.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/strfmt.h b/Headers/strfmt.h index b24910c7..6b521b5b 100644 --- a/Headers/strfmt.h +++ b/Headers/strfmt.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/strfmth.h b/Headers/strfmth.h index cfa1f843..fb3d06bf 100644 --- a/Headers/strfmth.h +++ b/Headers/strfmth.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/system.h b/Headers/system.h index fcea2a5c..fa0e3684 100644 --- a/Headers/system.h +++ b/Headers/system.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/system_darwin.h b/Headers/system_darwin.h index 3890de04..bca25147 100644 --- a/Headers/system_darwin.h +++ b/Headers/system_darwin.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/system_java.h b/Headers/system_java.h index 7d07bac5..a5619ad5 100644 --- a/Headers/system_java.h +++ b/Headers/system_java.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/system_linux.h b/Headers/system_linux.h index bf548a17..99f4a432 100644 --- a/Headers/system_linux.h +++ b/Headers/system_linux.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/system_msdos.h b/Headers/system_msdos.h index dc97e4ac..760abd5e 100644 --- a/Headers/system_msdos.h +++ b/Headers/system_msdos.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/system_windows.h b/Headers/system_windows.h index 4752483a..34221b71 100644 --- a/Headers/system_windows.h +++ b/Headers/system_windows.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/thread.h b/Headers/thread.h index 2bde26ce..eac1752b 100644 --- a/Headers/thread.h +++ b/Headers/thread.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/timing.h b/Headers/timing.h index 11a65ce0..b50de9a4 100644 --- a/Headers/timing.h +++ b/Headers/timing.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/ttb.h b/Headers/ttb.h index 9e51c613..c8a18eae 100644 --- a/Headers/ttb.h +++ b/Headers/ttb.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/tune.h b/Headers/tune.h index bf71235c..1db8ca5b 100644 --- a/Headers/tune.h +++ b/Headers/tune.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/tune_build.h b/Headers/tune_build.h index 2d73a4b3..309ef005 100644 --- a/Headers/tune_build.h +++ b/Headers/tune_build.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/tune_types.h b/Headers/tune_types.h index d3313dc9..a3d26ca7 100644 --- a/Headers/tune_types.h +++ b/Headers/tune_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/tune_utils.h b/Headers/tune_utils.h index 958d4c59..d7485927 100644 --- a/Headers/tune_utils.h +++ b/Headers/tune_utils.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/unicode.h b/Headers/unicode.h index 2458aacf..f3227e2e 100644 --- a/Headers/unicode.h +++ b/Headers/unicode.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/usb_types.h b/Headers/usb_types.h index dba27c48..79e6f937 100644 --- a/Headers/usb_types.h +++ b/Headers/usb_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/variables.h b/Headers/variables.h index 7e32f057..3e54b5e8 100644 --- a/Headers/variables.h +++ b/Headers/variables.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Headers/win_errno.h b/Headers/win_errno.h index 2452e9af..7d6800eb 100644 --- a/Headers/win_errno.h +++ b/Headers/win_errno.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Headers/win_pthread.h b/Headers/win_pthread.h index 59b83488..2b1739ed 100644 --- a/Headers/win_pthread.h +++ b/Headers/win_pthread.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Makefile.in b/Makefile.in index 983eb438..d7222151 100644 --- a/Makefile.in +++ b/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -28,6 +28,9 @@ install-systemd uninstall-systemd: install-udev uninstall-udev: cd Autostart/Udev && $(MAKE) $(@:-udev=) +install-appstream uninstall-appstream: + cd Autostart/AppStream && $(MAKE) $(@:-appstream=) + ARCHIVE_NAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) TAR_EXTENSION = tar GZIP_EXTENSION = gz @@ -94,6 +97,7 @@ ITERATE = \ $(MSG_DIR) \ Autostart/Systemd \ Autostart/Udev \ + Autostart/AppStream \ Android/Application \ ; do (cd $$directory && $(MAKE) $@); done diff --git a/Messages/Makefile.in b/Messages/Makefile.in index 4c88e4d4..21f04bea 100644 --- a/Messages/Makefile.in +++ b/Messages/Makefile.in @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Messages/brltty.pot b/Messages/brltty.pot index 4bfda0d9..d9443487 100644 --- a/Messages/brltty.pot +++ b/Messages/brltty.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: brltty 5.4\n" -"Report-Msgid-Bugs-To: brltty@mielke.cc\n" -"POT-Creation-Date: 2017-04-08 00:22+0200\n" +"Project-Id-Version: brltty 5.5\n" +"Report-Msgid-Bugs-To: brltty@brltty.com\n" +"POT-Creation-Date: 2018-01-04 14:10+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -31,15 +31,15 @@ msgstr "" msgid "1 cell" msgstr "" -#: Programs/menu_prefs.c:762 +#: Programs/menu_prefs.c:766 msgid "1 second" msgstr "" -#: Programs/menu_prefs.c:790 +#: Programs/menu_prefs.c:799 msgid "10 seconds" msgstr "" -#: Programs/menu_prefs.c:1111 +#: Programs/menu_prefs.c:1120 msgid "12 Hour" msgstr "" @@ -49,31 +49,31 @@ msgstr "" msgid "2 cells" msgstr "" -#: Programs/menu_prefs.c:763 +#: Programs/menu_prefs.c:767 msgid "2 seconds" msgstr "" -#: Programs/menu_prefs.c:791 +#: Programs/menu_prefs.c:800 msgid "20 seconds" msgstr "" -#: Programs/menu_prefs.c:1110 +#: Programs/menu_prefs.c:1119 msgid "24 Hour" msgstr "" -#: Programs/menu_prefs.c:760 +#: Programs/menu_prefs.c:764 msgid "250 milliseconds" msgstr "" -#: Programs/menu_prefs.c:792 +#: Programs/menu_prefs.c:801 msgid "40 seconds" msgstr "" -#: Programs/menu_prefs.c:789 +#: Programs/menu_prefs.c:798 msgid "5 seconds" msgstr "" -#: Programs/menu_prefs.c:761 +#: Programs/menu_prefs.c:765 msgid "500 milliseconds" msgstr "" @@ -124,7 +124,7 @@ msgstr "" msgid "Acoustic Guitar (steel)" msgstr "" -#: Programs/menu_prefs.c:1137 +#: Programs/menu_prefs.c:1146 msgid "After Time" msgstr "" @@ -132,23 +132,23 @@ msgstr "" msgid "Agogo" msgstr "" -#: Programs/menu_prefs.c:1327 +#: Programs/menu_prefs.c:1336 msgid "Alert" msgstr "" -#: Programs/menu_prefs.c:952 +#: Programs/menu_prefs.c:961 msgid "Alert Dots" msgstr "" -#: Programs/menu_prefs.c:957 +#: Programs/menu_prefs.c:966 msgid "Alert Messages" msgstr "" -#: Programs/menu_prefs.c:898 +#: Programs/menu_prefs.c:907 msgid "Alert Tunes" msgstr "" -#: Programs/menu_prefs.c:731 Programs/menu_prefs.c:991 +#: Programs/menu_prefs.c:735 Programs/menu_prefs.c:1000 msgid "All" msgstr "" @@ -172,7 +172,7 @@ msgstr "" msgid "April" msgstr "" -#: Programs/log.c:115 +#: Programs/log.c:116 msgid "Async Events" msgstr "" @@ -180,7 +180,7 @@ msgstr "" msgid "Attributes Invisible Time" msgstr "" -#: Programs/config.c:2666 Programs/menu_prefs.c:1233 +#: Programs/config.c:2667 Programs/menu_prefs.c:1242 msgid "Attributes Table" msgstr "" @@ -196,27 +196,27 @@ msgstr "" msgid "Autorelease" msgstr "" -#: Programs/menu_prefs.c:795 +#: Programs/menu_prefs.c:804 msgid "Autorelease Time" msgstr "" -#: Programs/menu_prefs.c:807 +#: Programs/menu_prefs.c:816 msgid "Autorepeat" msgstr "" -#: Programs/menu_prefs.c:819 +#: Programs/menu_prefs.c:828 msgid "Autorepeat Interval" msgstr "" -#: Programs/menu_prefs.c:813 +#: Programs/menu_prefs.c:822 msgid "Autorepeat Panning" msgstr "" -#: Programs/menu_prefs.c:1034 +#: Programs/menu_prefs.c:1043 msgid "Autospeak" msgstr "" -#: Programs/config.c:1656 +#: Programs/config.c:1657 msgid "BRLTTY stopped" msgstr "" @@ -240,11 +240,11 @@ msgstr "" msgid "Bassoon" msgstr "" -#: Programs/menu_prefs.c:904 +#: Programs/menu_prefs.c:913 msgid "Beeper" msgstr "" -#: Programs/menu_prefs.c:1136 +#: Programs/menu_prefs.c:1145 msgid "Before Time" msgstr "" @@ -264,11 +264,11 @@ msgstr "" msgid "Blinking Screen Cursor" msgstr "" -#: Programs/menu_prefs.c:1086 +#: Programs/menu_prefs.c:1095 msgid "Blinking Speech Cursor" msgstr "" -#: Programs/menu_prefs.c:561 Programs/menu_prefs.c:1196 +#: Programs/menu_prefs.c:561 Programs/menu_prefs.c:1205 msgid "Block" msgstr "" @@ -276,7 +276,7 @@ msgstr "" msgid "Blown Bottle" msgstr "" -#: Programs/log.c:139 +#: Programs/log.c:140 msgid "Bluetooth I/O" msgstr "" @@ -284,7 +284,7 @@ msgstr "" msgid "Braille Device" msgstr "" -#: Programs/menu_prefs.c:867 +#: Programs/menu_prefs.c:876 msgid "Braille Display Orientation" msgstr "" @@ -292,7 +292,7 @@ msgstr "" msgid "Braille Driver" msgstr "" -#: Programs/log.c:145 +#: Programs/log.c:146 msgid "Braille Driver Events" msgstr "" @@ -300,15 +300,15 @@ msgstr "" msgid "Braille Firmness" msgstr "" -#: Programs/menu_prefs.c:857 +#: Programs/menu_prefs.c:866 msgid "Braille Input Mode" msgstr "" -#: Programs/log.c:79 +#: Programs/log.c:80 msgid "Braille Key Events" msgstr "" -#: Programs/menu_prefs.c:847 +#: Programs/menu_prefs.c:856 msgid "Braille Keyboard Enabled" msgstr "" @@ -320,7 +320,7 @@ msgstr "" msgid "Braille Presentation" msgstr "" -#: Programs/menu_prefs.c:1223 +#: Programs/menu_prefs.c:1232 msgid "Braille Tables" msgstr "" @@ -332,7 +332,7 @@ msgstr "" msgid "Braille Window Coordinates" msgstr "" -#: Programs/menu_prefs.c:752 +#: Programs/menu_prefs.c:756 msgid "Braille Window Overlap" msgstr "" @@ -369,11 +369,11 @@ msgstr "" msgid "BrlAPI host and/or port to connect to" msgstr "" -#: Programs/menu_prefs.c:1279 +#: Programs/menu_prefs.c:1288 msgid "Bug Reports" msgstr "" -#: Programs/menu_prefs.c:1260 +#: Programs/menu_prefs.c:1269 msgid "Build Information" msgstr "" @@ -389,7 +389,7 @@ msgstr "" msgid "Capitals Visible Time" msgstr "" -#: Programs/menu_prefs.c:1350 +#: Programs/menu_prefs.c:1359 msgid "Category Log Level" msgstr "" @@ -426,15 +426,15 @@ msgstr "" msgid "Close" msgstr "" -#: Programs/menu_prefs.c:1120 +#: Programs/menu_prefs.c:1129 msgid "Colon" msgstr "" -#: Programs/menu_prefs.c:1284 +#: Programs/menu_prefs.c:1293 msgid "Configuration Directory" msgstr "" -#: Programs/config.c:2620 Programs/menu_prefs.c:1289 +#: Programs/config.c:2621 Programs/menu_prefs.c:1298 msgid "Configuration File" msgstr "" @@ -442,7 +442,7 @@ msgstr "" msgid "Console Bell" msgstr "" -#: Programs/menu_prefs.c:884 +#: Programs/menu_prefs.c:893 msgid "Console Bell Alert" msgstr "" @@ -454,7 +454,7 @@ msgstr "" msgid "Contracted Braille" msgstr "" -#: Programs/config.c:2673 Programs/menu_prefs.c:1241 +#: Programs/config.c:2674 Programs/menu_prefs.c:1250 msgid "Contraction Table" msgstr "" @@ -466,43 +466,43 @@ msgstr "" msgid "Contraction verification table." msgstr "" -#: Programs/menu_prefs.c:1328 +#: Programs/menu_prefs.c:1337 msgid "Critical" msgstr "" -#: Programs/log.c:97 +#: Programs/log.c:98 msgid "Cursor Routing" msgstr "" -#: Programs/log.c:91 +#: Programs/log.c:92 msgid "Cursor Tracking" msgstr "" -#: Programs/menu_prefs.c:766 +#: Programs/menu_prefs.c:770 msgid "Cursor Tracking Delay" msgstr "" -#: Programs/menu_prefs.c:1158 +#: Programs/menu_prefs.c:1167 msgid "Dash" msgstr "" -#: Programs/menu_prefs.c:1151 +#: Programs/menu_prefs.c:1160 msgid "Date Format" msgstr "" -#: Programs/menu_prefs.c:1140 +#: Programs/menu_prefs.c:1149 msgid "Date Position" msgstr "" -#: Programs/menu_prefs.c:1163 +#: Programs/menu_prefs.c:1172 msgid "Date Separator" msgstr "" -#: Programs/menu_prefs.c:1148 +#: Programs/menu_prefs.c:1157 msgid "Day Month Year" msgstr "" -#: Programs/menu_prefs.c:1333 +#: Programs/menu_prefs.c:1342 msgid "Debug" msgstr "" @@ -538,12 +538,12 @@ msgstr "" msgid "Done" msgstr "" -#: Programs/menu_prefs.c:1121 -#: Programs/menu_prefs.c:1160 +#: Programs/menu_prefs.c:1130 +#: Programs/menu_prefs.c:1169 msgid "Dot" msgstr "" -#: Programs/menu_prefs.c:854 +#: Programs/menu_prefs.c:863 msgid "Dots via Unicode Braille" msgstr "" @@ -552,7 +552,7 @@ msgstr "" msgid "Drawbar Organ" msgstr "" -#: Programs/config.c:2626 Programs/menu_prefs.c:1309 +#: Programs/config.c:2627 Programs/menu_prefs.c:1318 msgid "Drivers Directory" msgstr "" @@ -560,7 +560,7 @@ msgstr "" msgid "Dulcimer" msgstr "" -#: Programs/menu_prefs.c:746 +#: Programs/menu_prefs.c:750 msgid "Eager Sliding Braille Window" msgstr "" @@ -600,7 +600,7 @@ msgstr "" msgid "Electric Piano 2" msgstr "" -#: Programs/menu_prefs.c:1326 +#: Programs/menu_prefs.c:1335 msgid "Emergency" msgstr "" @@ -608,7 +608,7 @@ msgstr "" msgid "End" msgstr "" -#: Programs/menu_prefs.c:732 +#: Programs/menu_prefs.c:736 msgid "End of Line" msgstr "" @@ -616,7 +616,7 @@ msgstr "" msgid "English Horn" msgstr "" -#: Programs/menu_prefs.c:1026 +#: Programs/menu_prefs.c:1035 msgid "Enqueue" msgstr "" @@ -624,7 +624,7 @@ msgstr "" msgid "Ensemble" msgstr "" -#: Programs/menu_prefs.c:1329 +#: Programs/menu_prefs.c:1338 msgid "Error" msgstr "" @@ -632,7 +632,7 @@ msgstr "" msgid "Ethnic Instruments" msgstr "" -#: Programs/menu_prefs.c:881 +#: Programs/menu_prefs.c:890 msgid "Event Alerts" msgstr "" @@ -644,11 +644,11 @@ msgstr "" msgid "Explicit preference settings." msgstr "" -#: Programs/menu_prefs.c:907 +#: Programs/menu_prefs.c:916 msgid "FM" msgstr "" -#: Programs/menu_prefs.c:945 +#: Programs/menu_prefs.c:954 msgid "FM Volume" msgstr "" @@ -725,7 +725,7 @@ msgstr "" msgid "Generic" msgstr "" -#: Programs/log.c:61 +#: Programs/log.c:62 msgid "Generic Input" msgstr "" @@ -766,11 +766,11 @@ msgstr "" msgid "Help Screen" msgstr "" -#: Programs/menu_prefs.c:632 Programs/menu_prefs.c:836 +#: Programs/menu_prefs.c:632 Programs/menu_prefs.c:845 msgid "High" msgstr "" -#: Programs/menu_prefs.c:778 +#: Programs/menu_prefs.c:787 msgid "Highlight Braille Window Location" msgstr "" @@ -778,7 +778,7 @@ msgstr "" msgid "Honkytonk Piano" msgstr "" -#: Programs/menu_prefs.c:1025 +#: Programs/menu_prefs.c:1034 msgid "Immediate" msgstr "" @@ -790,15 +790,15 @@ msgstr "" msgid "Incompatible XKB server support\n" msgstr "" -#: Programs/menu_prefs.c:1332 +#: Programs/menu_prefs.c:1341 msgid "Information" msgstr "" -#: Programs/menu_prefs.c:784 +#: Programs/menu_prefs.c:793 msgid "Input Options" msgstr "" -#: Programs/log.c:67 +#: Programs/log.c:68 msgid "Input Packets" msgstr "" @@ -807,7 +807,7 @@ msgstr "" msgid "Install the %s service, and then exit." msgstr "" -#: Programs/menu_prefs.c:1336 +#: Programs/menu_prefs.c:1345 msgid "Internal Parameters" msgstr "" @@ -839,15 +839,15 @@ msgstr "" msgid "Key Table" msgstr "" -#: Programs/log.c:85 +#: Programs/log.c:86 msgid "Keyboard Key Events" msgstr "" -#: Programs/menu_prefs.c:891 +#: Programs/menu_prefs.c:900 msgid "Keyboard LED Alerts" msgstr "" -#: Programs/config.c:2680 Programs/menu_prefs.c:873 +#: Programs/config.c:2681 Programs/menu_prefs.c:882 msgid "Keyboard Table" msgstr "" @@ -855,7 +855,7 @@ msgstr "" msgid "Koto" msgstr "" -#: Programs/config.c:2810 +#: Programs/config.c:2811 msgid "Language" msgstr "" @@ -896,7 +896,7 @@ msgstr "" msgid "Learn Mode" msgstr "" -#: Programs/menu_prefs.c:1175 +#: Programs/menu_prefs.c:1184 msgid "Left" msgstr "" @@ -912,11 +912,11 @@ msgstr "" msgid "List key table in reStructuredText format." msgstr "" -#: Programs/menu_prefs.c:1319 +#: Programs/menu_prefs.c:1328 msgid "Locale Directory" msgstr "" -#: Programs/menu_prefs.c:1355 +#: Programs/menu_prefs.c:1364 msgid "Log Categories" msgstr "" @@ -924,7 +924,7 @@ msgstr "" msgid "Log Level" msgstr "" -#: Programs/menu_prefs.c:1416 +#: Programs/menu_prefs.c:1425 msgid "Log Messages" msgstr "" @@ -941,11 +941,11 @@ msgstr "" msgid "Logging level (%s or one of {%s}) and/or log categories to enable (any combination of {%s}, each optionally prefixed by %s to disable)" msgstr "" -#: Programs/menu_prefs.c:801 +#: Programs/menu_prefs.c:810 msgid "Long Press Time" msgstr "" -#: Programs/menu_prefs.c:630 Programs/menu_prefs.c:834 +#: Programs/menu_prefs.c:630 Programs/menu_prefs.c:843 msgid "Low" msgstr "" @@ -957,7 +957,7 @@ msgstr "" msgid "Lower Right Dot" msgstr "" -#: Programs/menu_prefs.c:906 +#: Programs/menu_prefs.c:915 msgid "MIDI" msgstr "" @@ -965,11 +965,11 @@ msgstr "" msgid "MIDI (Musical Instrument Digital Interface) device specifier." msgstr "" -#: Programs/menu_prefs.c:936 +#: Programs/menu_prefs.c:945 msgid "MIDI Instrument" msgstr "" -#: Programs/menu_prefs.c:926 +#: Programs/menu_prefs.c:935 msgid "MIDI Volume" msgstr "" @@ -981,7 +981,7 @@ msgstr "" msgid "Marimba" msgstr "" -#: Programs/menu_prefs.c:633 Programs/menu_prefs.c:837 +#: Programs/menu_prefs.c:633 Programs/menu_prefs.c:846 msgid "Maximum" msgstr "" @@ -993,7 +993,7 @@ msgstr "" msgid "May" msgstr "" -#: Programs/menu_prefs.c:631 Programs/menu_prefs.c:835 +#: Programs/menu_prefs.c:631 Programs/menu_prefs.c:844 msgid "Medium" msgstr "" @@ -1009,11 +1009,11 @@ msgstr "" msgid "Message hold timeout (in 10ms units)." msgstr "" -#: Programs/menu_prefs.c:629 Programs/menu_prefs.c:833 +#: Programs/menu_prefs.c:629 Programs/menu_prefs.c:842 msgid "Minimum" msgstr "" -#: Programs/menu_prefs.c:1147 +#: Programs/menu_prefs.c:1156 msgid "Month Day Year" msgstr "" @@ -1021,7 +1021,7 @@ msgstr "" msgid "Music Box" msgstr "" -#: Programs/menu_prefs.c:906 +#: Programs/menu_prefs.c:915 msgid "Musical Instrument Digital Interface" msgstr "" @@ -1066,20 +1066,20 @@ msgstr "" msgid "No Capitalization" msgstr "" -#: Programs/menu_prefs.c:759 Programs/menu_prefs.c:989 -#: Programs/menu_prefs.c:1002 -#: Programs/menu_prefs.c:1015 -#: Programs/menu_prefs.c:1135 -#: Programs/menu_prefs.c:1174 -#: Programs/menu_prefs.c:1194 +#: Programs/menu_prefs.c:763 Programs/menu_prefs.c:998 +#: Programs/menu_prefs.c:1011 +#: Programs/menu_prefs.c:1024 +#: Programs/menu_prefs.c:1144 +#: Programs/menu_prefs.c:1183 +#: Programs/menu_prefs.c:1203 msgid "None" msgstr "" -#: Programs/menu_prefs.c:863 +#: Programs/menu_prefs.c:872 msgid "Normal" msgstr "" -#: Programs/menu_prefs.c:1331 +#: Programs/menu_prefs.c:1340 msgid "Notice" msgstr "" @@ -1099,7 +1099,7 @@ msgstr "" msgid "October" msgstr "" -#: Programs/menu_prefs.c:788 +#: Programs/menu_prefs.c:797 msgid "Off" msgstr "" @@ -1119,7 +1119,7 @@ msgstr "" msgid "Organ" msgstr "" -#: Programs/log.c:73 +#: Programs/log.c:74 msgid "Output Packets" msgstr "" @@ -1131,7 +1131,7 @@ msgstr "" msgid "PC mode" msgstr "" -#: Programs/menu_prefs.c:905 +#: Programs/menu_prefs.c:914 msgid "PCM" msgstr "" @@ -1139,7 +1139,7 @@ msgstr "" msgid "PCM (soundcard digital audio) device specifier." msgstr "" -#: Programs/menu_prefs.c:918 +#: Programs/menu_prefs.c:927 msgid "PCM Volume" msgstr "" @@ -1147,11 +1147,11 @@ msgstr "" msgid "PS/2 (set 3) keyboard scan code" msgstr "" -#: Programs/menu_prefs.c:1269 +#: Programs/menu_prefs.c:1278 msgid "Package Revision" msgstr "" -#: Programs/menu_prefs.c:1264 +#: Programs/menu_prefs.c:1273 msgid "Package Version" msgstr "" @@ -1283,11 +1283,11 @@ msgstr "" msgid "Pizzicato Strings" msgstr "" -#: Drivers/Braille/Baum/braille.c:1076 +#: Drivers/Braille/Baum/braille.c:1104 msgid "Powerdown" msgstr "" -#: Programs/config.c:2621 Programs/menu_prefs.c:1299 +#: Programs/config.c:2622 Programs/menu_prefs.c:1308 msgid "Preferences File" msgstr "" @@ -1303,7 +1303,7 @@ msgstr "" msgid "Print a usage summary (commonly used options only), and then exit." msgstr "" -#: Programs/menu_prefs.c:1250 +#: Programs/menu_prefs.c:1259 msgid "Profiles" msgstr "" @@ -1311,7 +1311,7 @@ msgstr "" msgid "Properties of eligible keyboards." msgstr "" -#: Programs/menu_prefs.c:1006 +#: Programs/menu_prefs.c:1015 msgid "Raise Pitch" msgstr "" @@ -1360,19 +1360,19 @@ msgstr "" msgid "Report the characters within the current screen font that aren't defined within the text table." msgstr "" -#: Programs/menu_prefs.c:733 +#: Programs/menu_prefs.c:737 msgid "Rest of Line" msgstr "" -#: Programs/menu_prefs.c:1398 +#: Programs/menu_prefs.c:1407 msgid "Restart Braille Driver" msgstr "" -#: Programs/menu_prefs.c:1410 +#: Programs/menu_prefs.c:1419 msgid "Restart Screen Driver" msgstr "" -#: Programs/menu_prefs.c:1404 +#: Programs/menu_prefs.c:1413 msgid "Restart Speech Driver" msgstr "" @@ -1380,7 +1380,7 @@ msgstr "" msgid "Reverse Cymbal" msgstr "" -#: Programs/menu_prefs.c:1176 +#: Programs/menu_prefs.c:1185 msgid "Right" msgstr "" @@ -1388,7 +1388,7 @@ msgstr "" msgid "Rock Organ" msgstr "" -#: Programs/menu_prefs.c:864 +#: Programs/menu_prefs.c:873 msgid "Rotated" msgstr "" @@ -1398,15 +1398,15 @@ msgstr "" #. "cap" here, used during speech output, is short for "capital". #. It is spoken just before an uppercase letter, e.g. "cap A". -#: Programs/menu_prefs.c:1005 +#: Programs/menu_prefs.c:1014 msgid "Say Cap" msgstr "" -#: Programs/menu_prefs.c:1029 +#: Programs/menu_prefs.c:1038 msgid "Say Line Mode" msgstr "" -#: Programs/menu_prefs.c:1016 +#: Programs/menu_prefs.c:1025 msgid "Say Space" msgstr "" @@ -1442,11 +1442,11 @@ msgstr "" msgid "Screen Cursor and Braille Window Row" msgstr "" -#: Programs/config.c:2112 +#: Programs/config.c:2113 msgid "Screen Driver" msgstr "" -#: Programs/log.c:157 +#: Programs/log.c:158 msgid "Screen Driver Events" msgstr "" @@ -1454,7 +1454,7 @@ msgstr "" msgid "Screen Number" msgstr "" -#: Programs/config.c:2118 +#: Programs/config.c:2119 msgid "Screen Parameter" msgstr "" @@ -1471,11 +1471,11 @@ msgstr "" msgid "September" msgstr "" -#: Programs/log.c:127 +#: Programs/log.c:128 msgid "Serial I/O" msgstr "" -#: Programs/log.c:121 +#: Programs/log.c:122 msgid "Server Events" msgstr "" @@ -1507,11 +1507,11 @@ msgstr "" msgid "Show Screen Cursor" msgstr "" -#: Programs/menu_prefs.c:1129 +#: Programs/menu_prefs.c:1138 msgid "Show Seconds" msgstr "" -#: Programs/menu_prefs.c:1075 +#: Programs/menu_prefs.c:1084 msgid "Show Speech Cursor" msgstr "" @@ -1524,15 +1524,15 @@ msgstr "" msgid "Sitar" msgstr "" -#: Programs/menu_prefs.c:725 +#: Programs/menu_prefs.c:729 msgid "Skip Blank Braille Windows" msgstr "" -#: Programs/menu_prefs.c:720 +#: Programs/menu_prefs.c:724 msgid "Skip Identical Lines" msgstr "" -#: Programs/menu_prefs.c:736 +#: Programs/menu_prefs.c:740 msgid "Skip Which Blank Braille Windows" msgstr "" @@ -1544,15 +1544,15 @@ msgstr "" msgid "Slap Bass 2" msgstr "" -#: Programs/menu_prefs.c:1159 +#: Programs/menu_prefs.c:1168 msgid "Slash" msgstr "" -#: Programs/menu_prefs.c:741 +#: Programs/menu_prefs.c:745 msgid "Sliding Braille Window" msgstr "" -#: Programs/menu_prefs.c:990 +#: Programs/menu_prefs.c:999 msgid "Some" msgstr "" @@ -1565,92 +1565,92 @@ msgstr "" msgid "Sound Effects" msgstr "" -#: Programs/menu_prefs.c:1195 +#: Programs/menu_prefs.c:1204 msgid "Space" msgstr "" -#: Programs/menu_prefs.c:1069 +#: Programs/menu_prefs.c:1078 msgid "Speak Completed Words" msgstr "" -#: Programs/menu_prefs.c:1057 +#: Programs/menu_prefs.c:1066 msgid "Speak Deleted Characters" msgstr "" -#: Programs/menu_prefs.c:1051 +#: Programs/menu_prefs.c:1060 msgid "Speak Inserted Characters" msgstr "" -#: Programs/menu_prefs.c:1063 +#: Programs/menu_prefs.c:1072 msgid "Speak Replaced Characters" msgstr "" -#: Programs/menu_prefs.c:1045 +#: Programs/menu_prefs.c:1054 msgid "Speak Selected Character" msgstr "" -#: Programs/menu_prefs.c:1039 +#: Programs/menu_prefs.c:1048 msgid "Speak Selected Line" msgstr "" -#: Programs/menu_prefs.c:1098 +#: Programs/menu_prefs.c:1107 msgid "Speech Cursor Invisible Time" msgstr "" -#: Programs/menu_prefs.c:1080 +#: Programs/menu_prefs.c:1089 msgid "Speech Cursor Style" msgstr "" -#: Programs/menu_prefs.c:1092 +#: Programs/menu_prefs.c:1101 msgid "Speech Cursor Visible Time" msgstr "" -#: Programs/config.c:1880 +#: Programs/config.c:1881 msgid "Speech Driver" msgstr "" -#: Programs/log.c:151 +#: Programs/log.c:152 msgid "Speech Driver Events" msgstr "" -#: Programs/log.c:109 +#: Programs/log.c:110 msgid "Speech Events" msgstr "" #. Create the file system object for speech input. -#: Programs/config.c:2720 +#: Programs/config.c:2721 msgid "Speech Input" msgstr "" -#: Programs/menu_prefs.c:964 +#: Programs/menu_prefs.c:973 msgid "Speech Options" msgstr "" -#: Programs/config.c:1883 +#: Programs/config.c:1884 msgid "Speech Parameter" msgstr "" -#: Programs/menu_prefs.c:981 +#: Programs/menu_prefs.c:990 msgid "Speech Pitch" msgstr "" -#: Programs/menu_prefs.c:994 +#: Programs/menu_prefs.c:1003 msgid "Speech Punctuation" msgstr "" -#: Programs/menu_prefs.c:974 +#: Programs/menu_prefs.c:983 msgid "Speech Rate" msgstr "" -#: Programs/menu_prefs.c:1009 +#: Programs/menu_prefs.c:1018 msgid "Speech Uppercase Indicator" msgstr "" -#: Programs/menu_prefs.c:967 +#: Programs/menu_prefs.c:976 msgid "Speech Volume" msgstr "" -#: Programs/menu_prefs.c:1019 +#: Programs/menu_prefs.c:1028 msgid "Speech Whitespace Indicator" msgstr "" @@ -1659,7 +1659,7 @@ msgstr "" msgid "Speech driver code (%s, %s, or one of {%s})." msgstr "" -#: Programs/menu_prefs.c:1345 +#: Programs/menu_prefs.c:1354 msgid "Standard Error Log Level" msgstr "" @@ -1671,11 +1671,11 @@ msgstr "" msgid "State Letter" msgstr "" -#: Programs/menu_prefs.c:1170 +#: Programs/menu_prefs.c:1179 msgid "Status Cells" msgstr "" -#: Programs/menu_prefs.c:1186 +#: Programs/menu_prefs.c:1195 msgid "Status Count" msgstr "" @@ -1683,15 +1683,15 @@ msgstr "" msgid "Status Field" msgstr "" -#: Programs/menu_prefs.c:1179 +#: Programs/menu_prefs.c:1188 msgid "Status Position" msgstr "" -#: Programs/menu_prefs.c:1201 +#: Programs/menu_prefs.c:1210 msgid "Status Separator" msgstr "" -#: Programs/menu_prefs.c:1197 +#: Programs/menu_prefs.c:1206 msgid "Status Side" msgstr "" @@ -1769,11 +1769,11 @@ msgstr "" msgid "SynthStrings 2" msgstr "" -#: Programs/menu_prefs.c:1340 +#: Programs/menu_prefs.c:1349 msgid "System Log Level" msgstr "" -#: Programs/config.c:2627 Programs/menu_prefs.c:1314 +#: Programs/config.c:2628 Programs/menu_prefs.c:1323 msgid "Tables Directory" msgstr "" @@ -1797,7 +1797,7 @@ msgstr "" msgid "Text Indicators" msgstr "" -#: Programs/menu_prefs.c:1198 +#: Programs/menu_prefs.c:1207 msgid "Text Side" msgstr "" @@ -1805,7 +1805,7 @@ msgstr "" msgid "Text Style" msgstr "" -#: Programs/config.c:2652 Programs/menu_prefs.c:1226 +#: Programs/config.c:2653 Programs/menu_prefs.c:1235 msgid "Text Table" msgstr "" @@ -1817,15 +1817,15 @@ msgstr "" msgid "Time" msgstr "" -#: Programs/menu_prefs.c:1114 +#: Programs/menu_prefs.c:1123 msgid "Time Format" msgstr "" -#: Programs/menu_prefs.c:1106 +#: Programs/menu_prefs.c:1115 msgid "Time Presentation" msgstr "" -#: Programs/menu_prefs.c:1124 +#: Programs/menu_prefs.c:1133 msgid "Time Separator" msgstr "" @@ -1838,23 +1838,27 @@ msgstr "" msgid "Tinkle Bell" msgstr "" -#: Programs/menu_prefs.c:1394 +#: Programs/menu_prefs.c:1403 msgid "Tools" msgstr "" -#: Programs/menu_prefs.c:826 +#: Programs/menu_prefs.c:835 msgid "Touch Navigation" msgstr "" -#: Programs/menu_prefs.c:840 +#: Programs/menu_prefs.c:849 msgid "Touch Sensitivity" msgstr "" -#: Programs/menu_prefs.c:772 +#: Programs/menu_prefs.c:781 msgid "Track Screen Pointer" msgstr "" -#: Programs/menu_prefs.c:853 +#: Programs/menu_prefs.c:775 +msgid "Track Screen Scroll" +msgstr "" + +#: Programs/menu_prefs.c:862 msgid "Translated via Text Table" msgstr "" @@ -1879,11 +1883,11 @@ msgstr "" msgid "Tubular Bells" msgstr "" -#: Programs/menu_prefs.c:910 +#: Programs/menu_prefs.c:919 msgid "Tune Device" msgstr "" -#: Programs/log.c:133 +#: Programs/log.c:134 msgid "USB I/O" msgstr "" @@ -1895,11 +1899,11 @@ msgstr "" msgid "Unfrozen" msgstr "" -#: Programs/config.c:2624 Programs/menu_prefs.c:1294 +#: Programs/config.c:2625 Programs/menu_prefs.c:1303 msgid "Updatable Directory" msgstr "" -#: Programs/log.c:103 +#: Programs/log.c:104 msgid "Update Events" msgstr "" @@ -1928,11 +1932,11 @@ msgstr "" msgid "Voice Oohs" msgstr "" -#: Programs/menu_prefs.c:1330 +#: Programs/menu_prefs.c:1339 msgid "Warning" msgstr "" -#: Programs/menu_prefs.c:1274 +#: Programs/menu_prefs.c:1283 msgid "Web Site" msgstr "" @@ -1944,11 +1948,15 @@ msgstr "" msgid "Woodblock" msgstr "" -#: Programs/config.c:2613 +#: Programs/menu_prefs.c:720 +msgid "Word Wrap" +msgstr "" + +#: Programs/config.c:2614 msgid "Working Directory" msgstr "" -#: Programs/config.c:2625 Programs/menu_prefs.c:1304 +#: Programs/config.c:2626 Programs/menu_prefs.c:1313 msgid "Writable Directory" msgstr "" @@ -1972,7 +1980,7 @@ msgstr "" msgid "Xylophone" msgstr "" -#: Programs/menu_prefs.c:1146 +#: Programs/menu_prefs.c:1155 msgid "Year Month Day" msgstr "" @@ -2008,7 +2016,7 @@ msgstr "" msgid "backspace key" msgstr "" -#: Drivers/Braille/Baum/braille.c:1067 +#: Drivers/Braille/Baum/braille.c:1095 #: Drivers/Braille/TSI/braille.c:869 msgid "battery low" msgstr "" @@ -2039,7 +2047,7 @@ msgstr "" msgid "blue" msgstr "" -#: Programs/config.c:2692 +#: Programs/config.c:2693 #, c-format msgid "braille device not specified" msgstr "" @@ -2121,7 +2129,7 @@ msgstr "" msgid "cannot determine program directory" msgstr "" -#: Programs/config.c:2616 Programs/menu.c:544 +#: Programs/config.c:2617 Programs/menu.c:544 msgid "cannot determine working directory" msgstr "" @@ -2198,11 +2206,11 @@ msgstr "" #. "cap" here, used during speech output, is short for "capital". #. It is spoken just before an uppercase letter, e.g. "cap A". -#: Programs/core.c:888 +#: Programs/core.c:973 msgid "cap" msgstr "" -#: Programs/menu_prefs.c:753 Programs/menu_prefs.c:1187 +#: Programs/menu_prefs.c:757 Programs/menu_prefs.c:1196 msgid "cells" msgstr "" @@ -2231,7 +2239,7 @@ msgstr "" msgid "console not in use" msgstr "" -#: Programs/menu_prefs.c:904 +#: Programs/menu_prefs.c:913 msgid "console tone generator" msgstr "" @@ -2354,7 +2362,7 @@ msgstr "" msgid "dots 7 and 8" msgstr "" -#: Drivers/Braille/Baum/braille.c:1064 +#: Drivers/Braille/Baum/braille.c:1092 msgid "driver request" msgstr "" @@ -2677,7 +2685,7 @@ msgstr "" msgid "identifier,..." msgstr "" -#: Drivers/Braille/Baum/braille.c:1066 +#: Drivers/Braille/Baum/braille.c:1094 msgid "idle timeout" msgstr "" @@ -2717,11 +2725,11 @@ msgstr "" msgid "invalid flag setting" msgstr "" -#: Programs/config.c:2528 +#: Programs/config.c:2529 msgid "invalid message hold timeout" msgstr "" -#: Programs/brlapi_server.c:3129 +#: Programs/brlapi_server.c:3143 msgid "invalid thread stack size" msgstr "" @@ -2786,15 +2794,15 @@ msgstr "" msgid "missing operand" msgstr "" -#: Programs/parse.c:367 +#: Programs/parse.c:428 msgid "missing parameter name" msgstr "" -#: Programs/parse.c:353 +#: Programs/parse.c:414 msgid "missing parameter qualifier" msgstr "" -#: Programs/parse.c:329 +#: Programs/parse.c:390 msgid "missing parameter value" msgstr "" @@ -2840,7 +2848,7 @@ msgstr "" msgid "percentage" msgstr "" -#: Programs/config.c:2501 +#: Programs/config.c:2502 msgid "pid file not specified" msgstr "" @@ -2856,7 +2864,7 @@ msgstr "" msgid "place left end of braille window at character" msgstr "" -#: Drivers/Braille/Baum/braille.c:1065 +#: Drivers/Braille/Baum/braille.c:1093 msgid "power switch" msgstr "" @@ -2873,17 +2881,17 @@ msgstr "" msgid "red" msgstr "" -#: Programs/config.c:1701 +#: Programs/config.c:1702 #, c-format msgid "reinitializing braille driver" msgstr "" -#: Programs/config.c:2249 +#: Programs/config.c:2250 #, c-format msgid "reinitializing screen driver" msgstr "" -#: Programs/config.c:2030 +#: Programs/config.c:2031 #, c-format msgid "reinitializing speech driver" msgstr "" @@ -2927,7 +2935,7 @@ msgstr "" msgid "save preferences to disk" msgstr "" -#: Programs/config.c:2129 +#: Programs/config.c:2130 msgid "screen driver not loadable" msgstr "" @@ -3089,15 +3097,15 @@ msgstr "" msgid "show current date and time" msgstr "" -#: Programs/menu_prefs.c:905 +#: Programs/menu_prefs.c:914 msgid "soundcard digital audio" msgstr "" -#: Programs/menu_prefs.c:907 +#: Programs/menu_prefs.c:916 msgid "soundcard synthesizer" msgstr "" -#: Programs/cmd.c:277 Programs/core.c:869 +#: Programs/cmd.c:277 Programs/core.c:954 msgid "space" msgstr "" @@ -3125,7 +3133,7 @@ msgstr "" msgid "speak speech cursor location" msgstr "" -#: Programs/config.c:1894 +#: Programs/config.c:1895 msgid "speech driver not loadable" msgstr "" @@ -3225,7 +3233,7 @@ msgstr "" msgid "unknown option" msgstr "" -#: Programs/parse.c:396 +#: Programs/parse.c:457 msgid "unsupported parameter" msgstr "" diff --git a/Messages/de.po b/Messages/de.po index 291248d4..5af2a91b 100644 --- a/Messages/de.po +++ b/Messages/de.po @@ -1,14 +1,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -16,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: brltty 4.5\n" -"Report-Msgid-Bugs-To: brltty@mielke.cc\n" -"POT-Creation-Date: 2017-04-08 00:22+0200\n" -"PO-Revision-Date: 2017-04-08 00:38+0200\n" +"Report-Msgid-Bugs-To: brltty@brltty.com\n" +"POT-Creation-Date: 2018-01-04 14:10+0100\n" +"PO-Revision-Date: 2018-01-05 00:33+0100\n" "Last-Translator: Angela Engel \n" "Language-Team: LANGUAGE \n" "Language: de\n" @@ -39,15 +39,15 @@ msgstr "\"%s\" gestartet als \"%s\"\n" msgid "1 cell" msgstr "1 Zelle" -#: Programs/menu_prefs.c:762 +#: Programs/menu_prefs.c:766 msgid "1 second" msgstr "1 Sekunde" -#: Programs/menu_prefs.c:790 +#: Programs/menu_prefs.c:799 msgid "10 seconds" msgstr "10 Sekunden" -#: Programs/menu_prefs.c:1111 +#: Programs/menu_prefs.c:1120 msgid "12 Hour" msgstr "12 Stunden" @@ -57,31 +57,31 @@ msgstr "12 Stunden" msgid "2 cells" msgstr "2 Zellen" -#: Programs/menu_prefs.c:763 +#: Programs/menu_prefs.c:767 msgid "2 seconds" msgstr "2 Sekunden" -#: Programs/menu_prefs.c:791 +#: Programs/menu_prefs.c:800 msgid "20 seconds" msgstr "20 Sekunden" -#: Programs/menu_prefs.c:1110 +#: Programs/menu_prefs.c:1119 msgid "24 Hour" msgstr "24 Stunden" -#: Programs/menu_prefs.c:760 +#: Programs/menu_prefs.c:764 msgid "250 milliseconds" msgstr "250 Millisekunden" -#: Programs/menu_prefs.c:792 +#: Programs/menu_prefs.c:801 msgid "40 seconds" msgstr "40 Sekunden" -#: Programs/menu_prefs.c:789 +#: Programs/menu_prefs.c:798 msgid "5 seconds" msgstr "5 Sekunden" -#: Programs/menu_prefs.c:761 +#: Programs/menu_prefs.c:765 msgid "500 milliseconds" msgstr "500 Millisekunden" @@ -132,7 +132,7 @@ msgstr "Akustische Gitarre (Nylonsaiten)" msgid "Acoustic Guitar (steel)" msgstr "Akustische Gitarre (Stahlsaiten)" -#: Programs/menu_prefs.c:1137 +#: Programs/menu_prefs.c:1146 msgid "After Time" msgstr "Nach Uhrzeit" @@ -140,23 +140,23 @@ msgstr "Nach Uhrzeit" msgid "Agogo" msgstr "Agogo" -#: Programs/menu_prefs.c:1327 +#: Programs/menu_prefs.c:1336 msgid "Alert" msgstr "Alarm" -#: Programs/menu_prefs.c:952 +#: Programs/menu_prefs.c:961 msgid "Alert Dots" msgstr "Warnpunkte" -#: Programs/menu_prefs.c:957 +#: Programs/menu_prefs.c:966 msgid "Alert Messages" msgstr "Warnmeldungen" -#: Programs/menu_prefs.c:898 +#: Programs/menu_prefs.c:907 msgid "Alert Tunes" msgstr "Warntöne" -#: Programs/menu_prefs.c:731 Programs/menu_prefs.c:991 +#: Programs/menu_prefs.c:735 Programs/menu_prefs.c:1000 msgid "All" msgstr "Alle" @@ -180,7 +180,7 @@ msgstr "Applaus" msgid "April" msgstr "April" -#: Programs/log.c:115 +#: Programs/log.c:116 msgid "Async Events" msgstr "Asynchrone Ereignisse" @@ -188,7 +188,7 @@ msgstr "Asynchrone Ereignisse" msgid "Attributes Invisible Time" msgstr "Attribute sind unsichtbar für" -#: Programs/config.c:2666 Programs/menu_prefs.c:1233 +#: Programs/config.c:2667 Programs/menu_prefs.c:1242 msgid "Attributes Table" msgstr "Attributtabelle" @@ -201,32 +201,30 @@ msgid "August" msgstr "August" #: Programs/alert.c:168 -#, fuzzy msgid "Autorelease" -msgstr "Automatische Wiederholung" +msgstr "Automatische Einrastbeendung" -#: Programs/menu_prefs.c:795 -#, fuzzy +#: Programs/menu_prefs.c:804 msgid "Autorelease Time" -msgstr "Automatische Wiederholung" +msgstr "Zeit bis zur automatischen Einrastbeendung" -#: Programs/menu_prefs.c:807 +#: Programs/menu_prefs.c:816 msgid "Autorepeat" msgstr "Automatische Wiederholung" -#: Programs/menu_prefs.c:819 +#: Programs/menu_prefs.c:828 msgid "Autorepeat Interval" msgstr "Wiederholungsintervall" -#: Programs/menu_prefs.c:813 +#: Programs/menu_prefs.c:822 msgid "Autorepeat Panning" msgstr "Automatische Wiederholung für Seitwertsbewegungen" -#: Programs/menu_prefs.c:1034 +#: Programs/menu_prefs.c:1043 msgid "Autospeak" msgstr "Automatisches Sprechen" -#: Programs/config.c:1656 +#: Programs/config.c:1657 msgid "BRLTTY stopped" msgstr "BRLTTY gestoppt" @@ -250,11 +248,11 @@ msgstr "Bass" msgid "Bassoon" msgstr "Fagott" -#: Programs/menu_prefs.c:904 +#: Programs/menu_prefs.c:913 msgid "Beeper" msgstr "PC-Piepser" -#: Programs/menu_prefs.c:1136 +#: Programs/menu_prefs.c:1145 msgid "Before Time" msgstr "Vor Uhrzeit" @@ -274,11 +272,11 @@ msgstr "Blinkende Großbuchstaben" msgid "Blinking Screen Cursor" msgstr "Blinkender Bildschirmcursor" -#: Programs/menu_prefs.c:1086 +#: Programs/menu_prefs.c:1095 msgid "Blinking Speech Cursor" msgstr "Blinkender Sprachcursor" -#: Programs/menu_prefs.c:561 Programs/menu_prefs.c:1196 +#: Programs/menu_prefs.c:561 Programs/menu_prefs.c:1205 msgid "Block" msgstr "Block" @@ -286,7 +284,7 @@ msgstr "Block" msgid "Blown Bottle" msgstr "Geblasene Flasche" -#: Programs/log.c:139 +#: Programs/log.c:140 msgid "Bluetooth I/O" msgstr "Bluetooth E/A" @@ -294,7 +292,7 @@ msgstr "Bluetooth E/A" msgid "Braille Device" msgstr "Braillegerät" -#: Programs/menu_prefs.c:867 +#: Programs/menu_prefs.c:876 msgid "Braille Display Orientation" msgstr "Braillezeilenausrichtung" @@ -302,7 +300,7 @@ msgstr "Braillezeilenausrichtung" msgid "Braille Driver" msgstr "Brailletreiber" -#: Programs/log.c:145 +#: Programs/log.c:146 msgid "Braille Driver Events" msgstr "Brailletreiberereignisse" @@ -310,15 +308,15 @@ msgstr "Brailletreiberereignisse" msgid "Braille Firmness" msgstr "Braille-Stärke" -#: Programs/menu_prefs.c:857 +#: Programs/menu_prefs.c:866 msgid "Braille Input Mode" msgstr "Brailleeingabe-Modus" -#: Programs/log.c:79 +#: Programs/log.c:80 msgid "Braille Key Events" msgstr "Tastenereignisse der Braillezeile" -#: Programs/menu_prefs.c:847 +#: Programs/menu_prefs.c:856 msgid "Braille Keyboard Enabled" msgstr "Brailletastatur aktiviert" @@ -330,7 +328,7 @@ msgstr "Braille-Parameter" msgid "Braille Presentation" msgstr "Brailledarstellung" -#: Programs/menu_prefs.c:1223 +#: Programs/menu_prefs.c:1232 msgid "Braille Tables" msgstr "Brailletabellen" @@ -342,7 +340,7 @@ msgstr "Braillezeilenspalte" msgid "Braille Window Coordinates" msgstr "Braillezeilenkoordinaten" -#: Programs/menu_prefs.c:752 +#: Programs/menu_prefs.c:756 msgid "Braille Window Overlap" msgstr "Braillezeilenüberlappung" @@ -379,14 +377,13 @@ msgstr "BrlAPI Authorisierungs-/Berechtigungs-Zeichenkette" msgid "BrlAPI host and/or port to connect to" msgstr "BrlAPI Host und/oder Port mit dem verbunden werden soll" -#: Programs/menu_prefs.c:1279 +#: Programs/menu_prefs.c:1288 msgid "Bug Reports" msgstr "Fehlerberichte" -#: Programs/menu_prefs.c:1260 -#, fuzzy +#: Programs/menu_prefs.c:1269 msgid "Build Information" -msgstr "Information" +msgstr "Build Informationen" #: Programs/menu_prefs.c:621 msgid "Capitalization Mode" @@ -400,9 +397,9 @@ msgstr "Großbuchstaben sind unsichtbar für" msgid "Capitals Visible Time" msgstr "Großbuchstaben sind sichtbar für" -#: Programs/menu_prefs.c:1350 +#: Programs/menu_prefs.c:1359 msgid "Category Log Level" -msgstr "" +msgstr "Protokollierungsausführlichkeit für Kategorien" #. Chromatic Percussion #: Programs/midi.c:53 @@ -437,15 +434,15 @@ msgstr "Clave" msgid "Close" msgstr "Schließen" -#: Programs/menu_prefs.c:1120 +#: Programs/menu_prefs.c:1129 msgid "Colon" msgstr "Doppelpunkt" -#: Programs/menu_prefs.c:1284 +#: Programs/menu_prefs.c:1293 msgid "Configuration Directory" msgstr "Konfigurationsverzeichnis" -#: Programs/config.c:2620 Programs/menu_prefs.c:1289 +#: Programs/config.c:2621 Programs/menu_prefs.c:1298 msgid "Configuration File" msgstr "Konfigurationsdatei" @@ -453,10 +450,9 @@ msgstr "Konfigurationsdatei" msgid "Console Bell" msgstr "Konsolenglöckchen" -#: Programs/menu_prefs.c:884 -#, fuzzy +#: Programs/menu_prefs.c:893 msgid "Console Bell Alert" -msgstr "Konsolen-Tongenerator" +msgstr "Konsolen-Tongenerator Hinweis" #: Programs/midi.c:92 msgid "Contrabass" @@ -466,7 +462,7 @@ msgstr "Kontrabass" msgid "Contracted Braille" msgstr "Braille-Kurzschrift" -#: Programs/config.c:2673 Programs/menu_prefs.c:1241 +#: Programs/config.c:2674 Programs/menu_prefs.c:1250 msgid "Contraction Table" msgstr "Kurzschrifttabelle" @@ -478,44 +474,43 @@ msgstr "Kurzschrifttabelle." msgid "Contraction verification table." msgstr "Kurzschriftverifikationstabelle" -#: Programs/menu_prefs.c:1328 +#: Programs/menu_prefs.c:1337 msgid "Critical" msgstr "Kritisch" -#: Programs/log.c:97 +#: Programs/log.c:98 msgid "Cursor Routing" msgstr "Cursorrouting" -#: Programs/log.c:91 +#: Programs/log.c:92 msgid "Cursor Tracking" msgstr "Cursorverfolgung" -#: Programs/menu_prefs.c:766 -#, fuzzy +#: Programs/menu_prefs.c:770 msgid "Cursor Tracking Delay" -msgstr "Cursorverfolgung" +msgstr "Zeitverzögerung für Cursorverfolgung" -#: Programs/menu_prefs.c:1158 +#: Programs/menu_prefs.c:1167 msgid "Dash" msgstr "Bindestrich" -#: Programs/menu_prefs.c:1151 +#: Programs/menu_prefs.c:1160 msgid "Date Format" msgstr "Format des Datums" -#: Programs/menu_prefs.c:1140 +#: Programs/menu_prefs.c:1149 msgid "Date Position" msgstr "Position des Datums" -#: Programs/menu_prefs.c:1163 +#: Programs/menu_prefs.c:1172 msgid "Date Separator" msgstr "Datum Trennzeichen" -#: Programs/menu_prefs.c:1148 +#: Programs/menu_prefs.c:1157 msgid "Day Month Year" msgstr "Tag Monat Jahr" -#: Programs/menu_prefs.c:1333 +#: Programs/menu_prefs.c:1342 msgid "Debug" msgstr "Debug" @@ -545,17 +540,17 @@ msgstr "Schreibe keinen Text auf die Braillezeile" #: Programs/brltty-trtxt.c:83 msgid "Don't fall back to the Unicode base character." -msgstr "" +msgstr "Nicht auf das Unicode Basiszeichen zurückfallen." #: Programs/alert.c:52 msgid "Done" msgstr "Fertig" -#: Programs/menu_prefs.c:1121 Programs/menu_prefs.c:1160 +#: Programs/menu_prefs.c:1130 Programs/menu_prefs.c:1169 msgid "Dot" msgstr "Punkt" -#: Programs/menu_prefs.c:854 +#: Programs/menu_prefs.c:863 msgid "Dots via Unicode Braille" msgstr "Punkte via Unicode Braille" @@ -564,7 +559,7 @@ msgstr "Punkte via Unicode Braille" msgid "Drawbar Organ" msgstr "Orgel mit Zugstange" -#: Programs/config.c:2626 Programs/menu_prefs.c:1309 +#: Programs/config.c:2627 Programs/menu_prefs.c:1318 msgid "Drivers Directory" msgstr "Treiber-Verzeichnis" @@ -572,10 +567,10 @@ msgstr "Treiber-Verzeichnis" msgid "Dulcimer" msgstr "Dulcimer" -#: Programs/menu_prefs.c:746 +#: Programs/menu_prefs.c:750 #, fuzzy msgid "Eager Sliding Braille Window" -msgstr "Erweiterte Braillezeilenverschiebung" +msgstr "Erweiterte Braillezeilenausschnittsüberlappung" #: Programs/brltty-ttb.c:158 msgid "Edit table." @@ -614,7 +609,7 @@ msgstr "Elektrisches Klavier 1" msgid "Electric Piano 2" msgstr "Elektrisches Klavier 2" -#: Programs/menu_prefs.c:1326 +#: Programs/menu_prefs.c:1335 msgid "Emergency" msgstr "Notfall" @@ -622,7 +617,7 @@ msgstr "Notfall" msgid "End" msgstr "Ende" -#: Programs/menu_prefs.c:732 +#: Programs/menu_prefs.c:736 msgid "End of Line" msgstr "Ende der Zeile" @@ -630,7 +625,7 @@ msgstr "Ende der Zeile" msgid "English Horn" msgstr "Englisches Horn" -#: Programs/menu_prefs.c:1026 +#: Programs/menu_prefs.c:1035 msgid "Enqueue" msgstr "Anhängen" @@ -638,7 +633,7 @@ msgstr "Anhängen" msgid "Ensemble" msgstr "Ensemble" -#: Programs/menu_prefs.c:1329 +#: Programs/menu_prefs.c:1338 msgid "Error" msgstr "Fehler" @@ -646,7 +641,7 @@ msgstr "Fehler" msgid "Ethnic Instruments" msgstr "Ethnische Instrumente" -#: Programs/menu_prefs.c:881 +#: Programs/menu_prefs.c:890 msgid "Event Alerts" msgstr "Warnungen bei Ereignissen" @@ -658,11 +653,11 @@ msgstr "Aktuelles Wort ausschreiben" msgid "Explicit preference settings." msgstr "" -#: Programs/menu_prefs.c:907 +#: Programs/menu_prefs.c:916 msgid "FM" msgstr "FM" -#: Programs/menu_prefs.c:945 +#: Programs/menu_prefs.c:954 msgid "FM Volume" msgstr "FM Lautstärke" @@ -739,7 +734,7 @@ msgstr "Eingefroren" msgid "Generic" msgstr "Allgemein" -#: Programs/log.c:61 +#: Programs/log.c:62 msgid "Generic Input" msgstr "allgemeine Eingaben" @@ -780,11 +775,11 @@ msgstr "Helikopter" msgid "Help Screen" msgstr "Hilfe-Schirm" -#: Programs/menu_prefs.c:632 Programs/menu_prefs.c:836 +#: Programs/menu_prefs.c:632 Programs/menu_prefs.c:845 msgid "High" msgstr "Hoch" -#: Programs/menu_prefs.c:778 +#: Programs/menu_prefs.c:787 msgid "Highlight Braille Window Location" msgstr "Hebe Braillezeilen Position hervor" @@ -792,7 +787,7 @@ msgstr "Hebe Braillezeilen Position hervor" msgid "Honkytonk Piano" msgstr "Honky-tonk Klavier" -#: Programs/menu_prefs.c:1025 +#: Programs/menu_prefs.c:1034 msgid "Immediate" msgstr "Sofort" @@ -804,15 +799,15 @@ msgstr "Inkompatible XKB Bibliothek\n" msgid "Incompatible XKB server support\n" msgstr "Inkompatible XKB Serverunterstützung\n" -#: Programs/menu_prefs.c:1332 +#: Programs/menu_prefs.c:1341 msgid "Information" msgstr "Information" -#: Programs/menu_prefs.c:784 +#: Programs/menu_prefs.c:793 msgid "Input Options" msgstr "Eingabeoptionen" -#: Programs/log.c:67 +#: Programs/log.c:68 msgid "Input Packets" msgstr "eingehende Datenpakete" @@ -821,7 +816,7 @@ msgstr "eingehende Datenpakete" msgid "Install the %s service, and then exit." msgstr "Installiere das Service %s und beende dann." -#: Programs/menu_prefs.c:1336 +#: Programs/menu_prefs.c:1345 msgid "Internal Parameters" msgstr "Interne Parameter" @@ -853,15 +848,15 @@ msgstr "Tastenhilfe" msgid "Key Table" msgstr "Tastentabelle" -#: Programs/log.c:85 +#: Programs/log.c:86 msgid "Keyboard Key Events" msgstr "Tastaturereignisse" -#: Programs/menu_prefs.c:891 +#: Programs/menu_prefs.c:900 msgid "Keyboard LED Alerts" msgstr "Tastaturer-LED Warnungen" -#: Programs/config.c:2680 Programs/menu_prefs.c:873 +#: Programs/config.c:2681 Programs/menu_prefs.c:882 msgid "Keyboard Table" msgstr "Tastaturtabelle" @@ -869,7 +864,7 @@ msgstr "Tastaturtabelle" msgid "Koto" msgstr "Koto" -#: Programs/config.c:2810 +#: Programs/config.c:2811 msgid "Language" msgstr "Sprache" @@ -910,7 +905,7 @@ msgstr "Hauptstimme 8 (Bass und Führung)" msgid "Learn Mode" msgstr "Lernmodus" -#: Programs/menu_prefs.c:1175 +#: Programs/menu_prefs.c:1184 msgid "Left" msgstr "Links" @@ -926,12 +921,11 @@ msgstr "Tastentabelle im Hilfe-Schirm Format auflisten." msgid "List key table in reStructuredText format." msgstr "Tastentabelle im reStructuredText-Format auflisten." -#: Programs/menu_prefs.c:1319 -#, fuzzy +#: Programs/menu_prefs.c:1328 msgid "Locale Directory" -msgstr "Tabellenverzeichnis" +msgstr "Lokalisierungsverzeichnis" -#: Programs/menu_prefs.c:1355 +#: Programs/menu_prefs.c:1364 msgid "Log Categories" msgstr "Protokollierungskategorien" @@ -939,10 +933,9 @@ msgstr "Protokollierungskategorien" msgid "Log Level" msgstr "Protokollierungsausführlichkeit" -#: Programs/menu_prefs.c:1416 -#, fuzzy +#: Programs/menu_prefs.c:1425 msgid "Log Messages" -msgstr "Warnmeldungen" +msgstr "Protokollierungsmeldungen" #: Programs/config.c:607 msgid "Log the versions of the core, API, and built-in drivers, and then exit." @@ -957,11 +950,11 @@ msgstr "Protokolliere via Standardfehlerausgabe anstatt System Log." msgid "Logging level (%s or one of {%s}) and/or log categories to enable (any combination of {%s}, each optionally prefixed by %s to disable)" msgstr "" -#: Programs/menu_prefs.c:801 +#: Programs/menu_prefs.c:810 msgid "Long Press Time" msgstr "Zeit für einen langen Tastendruck" -#: Programs/menu_prefs.c:630 Programs/menu_prefs.c:834 +#: Programs/menu_prefs.c:630 Programs/menu_prefs.c:843 msgid "Low" msgstr "Niedrig" @@ -973,7 +966,7 @@ msgstr "Unterer linker Punkt" msgid "Lower Right Dot" msgstr "Unterer rechter Punkt" -#: Programs/menu_prefs.c:906 +#: Programs/menu_prefs.c:915 msgid "MIDI" msgstr "MIDI" @@ -981,11 +974,11 @@ msgstr "MIDI" msgid "MIDI (Musical Instrument Digital Interface) device specifier." msgstr "MIDI (Musical Instrument Digital Interface) Geräts-Angabe." -#: Programs/menu_prefs.c:936 +#: Programs/menu_prefs.c:945 msgid "MIDI Instrument" msgstr "MIDI Instrument" -#: Programs/menu_prefs.c:926 +#: Programs/menu_prefs.c:935 msgid "MIDI Volume" msgstr "MIDI Lautstärke" @@ -997,7 +990,7 @@ msgstr "März" msgid "Marimba" msgstr "Marimba" -#: Programs/menu_prefs.c:633 Programs/menu_prefs.c:837 +#: Programs/menu_prefs.c:633 Programs/menu_prefs.c:846 msgid "Maximum" msgstr "Maximal" @@ -1009,7 +1002,7 @@ msgstr "Maximale Länge einer Ausgabezeile." msgid "May" msgstr "Mai" -#: Programs/menu_prefs.c:631 Programs/menu_prefs.c:835 +#: Programs/menu_prefs.c:631 Programs/menu_prefs.c:844 msgid "Medium" msgstr "Mittel" @@ -1025,11 +1018,11 @@ msgstr "Menüoptionen" msgid "Message hold timeout (in 10ms units)." msgstr "Meldungsanzeigedauer (in 10ms Einheiten)." -#: Programs/menu_prefs.c:629 Programs/menu_prefs.c:833 +#: Programs/menu_prefs.c:629 Programs/menu_prefs.c:842 msgid "Minimum" msgstr "Minimal" -#: Programs/menu_prefs.c:1147 +#: Programs/menu_prefs.c:1156 msgid "Month Day Year" msgstr "Monat Tag Jahr" @@ -1037,7 +1030,7 @@ msgstr "Monat Tag Jahr" msgid "Music Box" msgstr "Musikbox" -#: Programs/menu_prefs.c:906 +#: Programs/menu_prefs.c:915 msgid "Musical Instrument Digital Interface" msgstr "Musical Instrument Digital Interface" @@ -1082,18 +1075,18 @@ msgstr "Nein" msgid "No Capitalization" msgstr "Keine Großschreibung" -#: Programs/menu_prefs.c:759 Programs/menu_prefs.c:989 -#: Programs/menu_prefs.c:1002 Programs/menu_prefs.c:1015 -#: Programs/menu_prefs.c:1135 Programs/menu_prefs.c:1174 -#: Programs/menu_prefs.c:1194 +#: Programs/menu_prefs.c:763 Programs/menu_prefs.c:998 +#: Programs/menu_prefs.c:1011 Programs/menu_prefs.c:1024 +#: Programs/menu_prefs.c:1144 Programs/menu_prefs.c:1183 +#: Programs/menu_prefs.c:1203 msgid "None" msgstr "Keine" -#: Programs/menu_prefs.c:863 +#: Programs/menu_prefs.c:872 msgid "Normal" msgstr "Normal" -#: Programs/menu_prefs.c:1331 +#: Programs/menu_prefs.c:1340 msgid "Notice" msgstr "Hinweis" @@ -1113,7 +1106,7 @@ msgstr "Okarina" msgid "October" msgstr "Oktober" -#: Programs/menu_prefs.c:788 +#: Programs/menu_prefs.c:797 msgid "Off" msgstr "Aus" @@ -1133,7 +1126,7 @@ msgstr "Orchesterharfe" msgid "Organ" msgstr "Orgel" -#: Programs/log.c:73 +#: Programs/log.c:74 msgid "Output Packets" msgstr "ausgehende Datenpakete" @@ -1145,7 +1138,7 @@ msgstr "Übersteuerte Gitarre" msgid "PC mode" msgstr "PC-Modus" -#: Programs/menu_prefs.c:905 +#: Programs/menu_prefs.c:914 msgid "PCM" msgstr "PCM" @@ -1153,7 +1146,7 @@ msgstr "PCM" msgid "PCM (soundcard digital audio) device specifier." msgstr "" -#: Programs/menu_prefs.c:918 +#: Programs/menu_prefs.c:927 msgid "PCM Volume" msgstr "PCM Lautstärke" @@ -1161,11 +1154,11 @@ msgstr "PCM Lautstärke" msgid "PS/2 (set 3) keyboard scan code" msgstr "PS/2 (set 3) Tastatur-Scancode" -#: Programs/menu_prefs.c:1269 +#: Programs/menu_prefs.c:1278 msgid "Package Revision" -msgstr "" +msgstr "Paketrevision" -#: Programs/menu_prefs.c:1264 +#: Programs/menu_prefs.c:1273 msgid "Package Version" msgstr "Paket Version" @@ -1296,11 +1289,11 @@ msgstr "Pfeife" msgid "Pizzicato Strings" msgstr "Pizzikato-Saiten" -#: Drivers/Braille/Baum/braille.c:1076 +#: Drivers/Braille/Baum/braille.c:1104 msgid "Powerdown" -msgstr "" +msgstr "Abschaltung" -#: Programs/config.c:2621 Programs/menu_prefs.c:1299 +#: Programs/config.c:2622 Programs/menu_prefs.c:1308 msgid "Preferences File" msgstr "Einstellungsdatei" @@ -1316,7 +1309,7 @@ msgstr "Zeige eine Benutzungszusammenfassung (alle Optionen) und beende dann." msgid "Print a usage summary (commonly used options only), and then exit." msgstr "Zeige eine Benutzungszusammenfassung (nur häufig verwendete Optionen) und beende dann." -#: Programs/menu_prefs.c:1250 +#: Programs/menu_prefs.c:1259 msgid "Profiles" msgstr "Profile" @@ -1324,7 +1317,7 @@ msgstr "Profile" msgid "Properties of eligible keyboards." msgstr "Eigenschaften von geeigneten Tastaturen." -#: Programs/menu_prefs.c:1006 +#: Programs/menu_prefs.c:1015 msgid "Raise Pitch" msgstr "Erhöhe Tonhöhe" @@ -1367,25 +1360,25 @@ msgstr "Entferne das Service %s und beende dann." #: Programs/brltty-ktb.c:46 msgid "Report problems with the key table." -msgstr "" +msgstr "Probleme mit der Tastatur-Befehlstabelle melden." #: Programs/brltty-ttb.c:186 msgid "Report the characters within the current screen font that aren't defined within the text table." -msgstr "" +msgstr "Jene Zeichen der aktuellen Bildschirmschriftart melden, welche nicht im aktuellen Braillezeichensatz definiert sind." -#: Programs/menu_prefs.c:733 +#: Programs/menu_prefs.c:737 msgid "Rest of Line" msgstr "Rest der Zeile" -#: Programs/menu_prefs.c:1398 +#: Programs/menu_prefs.c:1407 msgid "Restart Braille Driver" msgstr "Brailletreiber neu starten" -#: Programs/menu_prefs.c:1410 +#: Programs/menu_prefs.c:1419 msgid "Restart Screen Driver" msgstr "Bildschirmtreiber neu starten" -#: Programs/menu_prefs.c:1404 +#: Programs/menu_prefs.c:1413 msgid "Restart Speech Driver" msgstr "Sprachausgabentreiber neu starten" @@ -1393,7 +1386,7 @@ msgstr "Sprachausgabentreiber neu starten" msgid "Reverse Cymbal" msgstr "Becken Rückseite" -#: Programs/menu_prefs.c:1176 +#: Programs/menu_prefs.c:1185 msgid "Right" msgstr "Rechts" @@ -1401,7 +1394,7 @@ msgstr "Rechts" msgid "Rock Organ" msgstr "Rock-Orgel" -#: Programs/menu_prefs.c:864 +#: Programs/menu_prefs.c:873 msgid "Rotated" msgstr "gedreht" @@ -1411,15 +1404,15 @@ msgstr "Beim Verlassen speichern" #. "cap" here, used during speech output, is short for "capital". #. It is spoken just before an uppercase letter, e.g. "cap A". -#: Programs/menu_prefs.c:1005 +#: Programs/menu_prefs.c:1014 msgid "Say Cap" msgstr "Sprich Groß" -#: Programs/menu_prefs.c:1029 +#: Programs/menu_prefs.c:1038 msgid "Say Line Mode" msgstr "Zeilen-Vorlesemodus" -#: Programs/menu_prefs.c:1016 +#: Programs/menu_prefs.c:1025 msgid "Say Space" msgstr "Sprich Leerzeichen" @@ -1432,9 +1425,8 @@ msgid "Screen Cursor Coordinates" msgstr "Bildschirmcursorkoordinaten" #: Programs/menu_prefs.c:670 -#, fuzzy msgid "Screen Cursor Invisible Time" -msgstr "Sprachcursor ist unsichtbar für" +msgstr "Zeitraum der Unishctbarkeit des Bildschirmcursors" #: Programs/menu_prefs.c:446 msgid "Screen Cursor Row" @@ -1445,24 +1437,22 @@ msgid "Screen Cursor Style" msgstr "Bildschirmcursordarstellung" #: Programs/menu_prefs.c:664 -#, fuzzy msgid "Screen Cursor Visible Time" -msgstr "Sprachcursor ist sichtbar für" +msgstr "Zeitraum für die Sichtbarkeit des Bildschirmcursors" #: Programs/menu_prefs.c:447 -#, fuzzy msgid "Screen Cursor and Braille Window Column" -msgstr "Cursor- und Braillezeilenspalte" +msgstr "Spaltenanzeige für Bildschirmcursor und Braillezeilenausschnitt" #: Programs/menu_prefs.c:448 msgid "Screen Cursor and Braille Window Row" -msgstr "Bildschirmcursor- und Braillezeilenszeile" +msgstr "Zeilenanzeige für Bildschirmcursor und Braillezeilenausschnitt" -#: Programs/config.c:2112 +#: Programs/config.c:2113 msgid "Screen Driver" msgstr "Bildschirmtreiber" -#: Programs/log.c:157 +#: Programs/log.c:158 msgid "Screen Driver Events" msgstr "Bildschirmtreiberereignisse" @@ -1470,14 +1460,14 @@ msgstr "Bildschirmtreiberereignisse" msgid "Screen Number" msgstr "Bildschirmnummer" -#: Programs/config.c:2118 +#: Programs/config.c:2119 msgid "Screen Parameter" msgstr "Bildschirm-Parameter" #: Programs/config.c:527 -#, fuzzy, c-format +#, c-format msgid "Screen driver code (%s, %s, or one of {%s})." -msgstr "Bildschirmtreiber: einer von [%s]" +msgstr "Bildschirmtreiber Kurzbezeichnung (%s, %s, oder eine von {%s})." #: Programs/midi.c:181 msgid "Seashore" @@ -1487,11 +1477,11 @@ msgstr "Brandung" msgid "September" msgstr "September" -#: Programs/log.c:127 +#: Programs/log.c:128 msgid "Serial I/O" msgstr "Serielle E/A" -#: Programs/log.c:121 +#: Programs/log.c:122 msgid "Server Events" msgstr "Server Ereignisse" @@ -1523,11 +1513,11 @@ msgstr "Zeige Attribute" msgid "Show Screen Cursor" msgstr "Zeige Bildschirmcursor" -#: Programs/menu_prefs.c:1129 +#: Programs/menu_prefs.c:1138 msgid "Show Seconds" msgstr "Sekunden anzeigen" -#: Programs/menu_prefs.c:1075 +#: Programs/menu_prefs.c:1084 msgid "Show Speech Cursor" msgstr "Zeige Sprachcursor" @@ -1540,15 +1530,15 @@ msgstr "Zeige Größen von Untermenüs" msgid "Sitar" msgstr "Sitar" -#: Programs/menu_prefs.c:725 +#: Programs/menu_prefs.c:729 msgid "Skip Blank Braille Windows" msgstr "Leere Braillezeileninhalte überspringen" -#: Programs/menu_prefs.c:720 +#: Programs/menu_prefs.c:724 msgid "Skip Identical Lines" msgstr "Identische Zeilen überspringen" -#: Programs/menu_prefs.c:736 +#: Programs/menu_prefs.c:740 #, fuzzy msgid "Skip Which Blank Braille Windows" msgstr "Art der leeren Braillezeileninhalte" @@ -1561,16 +1551,15 @@ msgstr "Geschlagener Bass 1" msgid "Slap Bass 2" msgstr "Geschlagener Bass 2" -#: Programs/menu_prefs.c:1159 +#: Programs/menu_prefs.c:1168 msgid "Slash" msgstr "Schrägstrich" -#: Programs/menu_prefs.c:741 -#, fuzzy +#: Programs/menu_prefs.c:745 msgid "Sliding Braille Window" -msgstr "Braillezeilenverschibung" +msgstr "überlappende Braillezeilenausschnitte" -#: Programs/menu_prefs.c:990 +#: Programs/menu_prefs.c:999 msgid "Some" msgstr "Einige" @@ -1583,103 +1572,101 @@ msgstr "Sopransaxophon" msgid "Sound Effects" msgstr "Soundeffekte" -#: Programs/menu_prefs.c:1195 +#: Programs/menu_prefs.c:1204 msgid "Space" msgstr "Leer" -#: Programs/menu_prefs.c:1069 +#: Programs/menu_prefs.c:1078 msgid "Speak Completed Words" msgstr "Sprich vervollständigte Wörter" -#: Programs/menu_prefs.c:1057 +#: Programs/menu_prefs.c:1066 msgid "Speak Deleted Characters" msgstr "Sprich gelöschte Zeichen" -#: Programs/menu_prefs.c:1051 +#: Programs/menu_prefs.c:1060 msgid "Speak Inserted Characters" msgstr "Sprich eingefügte Zeichen" -#: Programs/menu_prefs.c:1063 +#: Programs/menu_prefs.c:1072 msgid "Speak Replaced Characters" msgstr "Sprich ersetzte Zeichen" -#: Programs/menu_prefs.c:1045 +#: Programs/menu_prefs.c:1054 msgid "Speak Selected Character" msgstr "Sprich hervorgehobenes Zeichen" -#: Programs/menu_prefs.c:1039 +#: Programs/menu_prefs.c:1048 msgid "Speak Selected Line" msgstr "Sprich hervorgehobene Zeile" -#: Programs/menu_prefs.c:1098 +#: Programs/menu_prefs.c:1107 msgid "Speech Cursor Invisible Time" msgstr "Sprachcursor ist unsichtbar für" -#: Programs/menu_prefs.c:1080 +#: Programs/menu_prefs.c:1089 msgid "Speech Cursor Style" msgstr "Sprachcursordarstellung" -#: Programs/menu_prefs.c:1092 +#: Programs/menu_prefs.c:1101 msgid "Speech Cursor Visible Time" msgstr "Sprachcursor ist sichtbar für" -#: Programs/config.c:1880 +#: Programs/config.c:1881 msgid "Speech Driver" msgstr "Sprachausgabentreiber" -#: Programs/log.c:151 +#: Programs/log.c:152 msgid "Speech Driver Events" msgstr "Ereignisse des Sprachausgabentreibers" -#: Programs/log.c:109 +#: Programs/log.c:110 msgid "Speech Events" msgstr "Sprachausgabenereignisse" #. Create the file system object for speech input. -#: Programs/config.c:2720 +#: Programs/config.c:2721 msgid "Speech Input" msgstr "" -#: Programs/menu_prefs.c:964 +#: Programs/menu_prefs.c:973 msgid "Speech Options" msgstr "Sprachausgabenoptionen" -#: Programs/config.c:1883 +#: Programs/config.c:1884 msgid "Speech Parameter" msgstr "Sprachausgaben-Parameter" -#: Programs/menu_prefs.c:981 +#: Programs/menu_prefs.c:990 msgid "Speech Pitch" msgstr "Tonhöhe der Sprache" -#: Programs/menu_prefs.c:994 +#: Programs/menu_prefs.c:1003 msgid "Speech Punctuation" msgstr "Satzzeichenansage" -#: Programs/menu_prefs.c:974 +#: Programs/menu_prefs.c:983 msgid "Speech Rate" msgstr "Sprechgeschwindigkeit" -#: Programs/menu_prefs.c:1009 -#, fuzzy +#: Programs/menu_prefs.c:1018 msgid "Speech Uppercase Indicator" -msgstr "Großbuchstabenanzeige" +msgstr "Großbuchstabenansage" -#: Programs/menu_prefs.c:967 +#: Programs/menu_prefs.c:976 msgid "Speech Volume" msgstr "Sprachlautstärke" -#: Programs/menu_prefs.c:1019 -#, fuzzy +#: Programs/menu_prefs.c:1028 msgid "Speech Whitespace Indicator" -msgstr "Leerzeichenansage" +msgstr "Leerraumansage" #: Programs/config.c:492 -#, fuzzy, c-format +#, c-format msgid "Speech driver code (%s, %s, or one of {%s})." -msgstr "Sprachausgabentreiber: einer von {%s}" +msgstr "Sprachausgabentreiber Kurzbezeichnung (%s, %s, oder eine von {%s})." -#: Programs/menu_prefs.c:1345 +#: Programs/menu_prefs.c:1354 msgid "Standard Error Log Level" msgstr "Protokollierungsausführlichkeit für die Standard-Fehlerausgabe" @@ -1691,11 +1678,11 @@ msgstr "Statuspunkte" msgid "State Letter" msgstr "Statusbuchstabe" -#: Programs/menu_prefs.c:1170 +#: Programs/menu_prefs.c:1179 msgid "Status Cells" msgstr "Statuszellen" -#: Programs/menu_prefs.c:1186 +#: Programs/menu_prefs.c:1195 msgid "Status Count" msgstr "Gesamtanzahl der Statuszellen" @@ -1703,15 +1690,15 @@ msgstr "Gesamtanzahl der Statuszellen" msgid "Status Field" msgstr "Statusfeld" -#: Programs/menu_prefs.c:1179 +#: Programs/menu_prefs.c:1188 msgid "Status Position" msgstr "Position der Statuszellen" -#: Programs/menu_prefs.c:1201 +#: Programs/menu_prefs.c:1210 msgid "Status Separator" msgstr "Status-Trennzeichen" -#: Programs/menu_prefs.c:1197 +#: Programs/menu_prefs.c:1206 msgid "Status Side" msgstr "Statusseitig" @@ -1789,11 +1776,11 @@ msgstr "Synth Saiteninstrumente 1" msgid "SynthStrings 2" msgstr "Synth Saiteninstrumente 2" -#: Programs/menu_prefs.c:1340 +#: Programs/menu_prefs.c:1349 msgid "System Log Level" msgstr "System-Protokollierungsausführlichkeit" -#: Programs/config.c:2627 Programs/menu_prefs.c:1314 +#: Programs/config.c:2628 Programs/menu_prefs.c:1323 msgid "Tables Directory" msgstr "Tabellenverzeichnis" @@ -1817,7 +1804,7 @@ msgstr "Tenorsaxophon" msgid "Text Indicators" msgstr "Indikatoren" -#: Programs/menu_prefs.c:1198 +#: Programs/menu_prefs.c:1207 msgid "Text Side" msgstr "Textseitig" @@ -1825,7 +1812,7 @@ msgstr "Textseitig" msgid "Text Style" msgstr "Textdarstellung" -#: Programs/config.c:2652 Programs/menu_prefs.c:1226 +#: Programs/config.c:2653 Programs/menu_prefs.c:1235 msgid "Text Table" msgstr "Texttabelle" @@ -1837,15 +1824,15 @@ msgstr "Texttabelle." msgid "Time" msgstr "Uhrzeit" -#: Programs/menu_prefs.c:1114 +#: Programs/menu_prefs.c:1123 msgid "Time Format" msgstr "Format der Uhrzeit" -#: Programs/menu_prefs.c:1106 +#: Programs/menu_prefs.c:1115 msgid "Time Presentation" msgstr "Darstellung der Uhrzeit und des Datums" -#: Programs/menu_prefs.c:1124 +#: Programs/menu_prefs.c:1133 msgid "Time Separator" msgstr "Uhrzeit-Trennzeichen" @@ -1858,24 +1845,27 @@ msgstr "Pauken" msgid "Tinkle Bell" msgstr "Glöckchen" -#: Programs/menu_prefs.c:1394 +#: Programs/menu_prefs.c:1403 msgid "Tools" msgstr "Werkzeuge" -#: Programs/menu_prefs.c:826 +#: Programs/menu_prefs.c:835 msgid "Touch Navigation" msgstr "Berührungsbasierte Navigation" -#: Programs/menu_prefs.c:840 +#: Programs/menu_prefs.c:849 msgid "Touch Sensitivity" msgstr "Berührungsempfindlichkeit" -#: Programs/menu_prefs.c:772 -#, fuzzy +#: Programs/menu_prefs.c:781 msgid "Track Screen Pointer" -msgstr "Bildschirm-Parameter" +msgstr "Mauszeigerverfolgung" -#: Programs/menu_prefs.c:853 +#: Programs/menu_prefs.c:775 +msgid "Track Screen Scroll" +msgstr "Bildschirmscrollverfolgung" + +#: Programs/menu_prefs.c:862 msgid "Translated via Text Table" msgstr "Durch Texttabelle übersetzt" @@ -1900,11 +1890,11 @@ msgstr "Tuba" msgid "Tubular Bells" msgstr "Röhrenglocken" -#: Programs/menu_prefs.c:910 +#: Programs/menu_prefs.c:919 msgid "Tune Device" msgstr "Tongeber" -#: Programs/log.c:133 +#: Programs/log.c:134 msgid "USB I/O" msgstr "USB E/A" @@ -1916,11 +1906,11 @@ msgstr "Unterlegung" msgid "Unfrozen" msgstr "Aufgetaut" -#: Programs/config.c:2624 Programs/menu_prefs.c:1294 +#: Programs/config.c:2625 Programs/menu_prefs.c:1303 msgid "Updatable Directory" msgstr "Modifizierbares Verzeichnis" -#: Programs/log.c:103 +#: Programs/log.c:104 msgid "Update Events" msgstr "Update Ereignisse" @@ -1949,11 +1939,11 @@ msgstr "Violine" msgid "Voice Oohs" msgstr "Stimme (Ooh)" -#: Programs/menu_prefs.c:1330 +#: Programs/menu_prefs.c:1339 msgid "Warning" msgstr "Warnung" -#: Programs/menu_prefs.c:1274 +#: Programs/menu_prefs.c:1283 msgid "Web Site" msgstr "Webseite" @@ -1965,11 +1955,15 @@ msgstr "Pfeife" msgid "Woodblock" msgstr "Holzblock" -#: Programs/config.c:2613 +#: Programs/menu_prefs.c:720 +msgid "Word Wrap" +msgstr "Wortumbruch" + +#: Programs/config.c:2614 msgid "Working Directory" msgstr "Arbeitsverzeichnis" -#: Programs/config.c:2625 Programs/menu_prefs.c:1304 +#: Programs/config.c:2626 Programs/menu_prefs.c:1313 msgid "Writable Directory" msgstr "Verzeichnis mit Schreibzugriff" @@ -1993,7 +1987,7 @@ msgstr "XT (set 1) Tastatur-Scancode" msgid "Xylophone" msgstr "Xylophon" -#: Programs/menu_prefs.c:1146 +#: Programs/menu_prefs.c:1155 msgid "Year Month Day" msgstr "Jahr Monat Tag" @@ -2029,24 +2023,21 @@ msgstr "beim Cursor" msgid "backspace key" msgstr "Rücktaste" -#: Drivers/Braille/Baum/braille.c:1067 Drivers/Braille/TSI/braille.c:869 +#: Drivers/Braille/Baum/braille.c:1095 Drivers/Braille/TSI/braille.c:869 msgid "battery low" msgstr "Akku schwach" #: Programs/cmds.auto.h:1038 -#, fuzzy msgid "bind to a specific virtual terminal" -msgstr "wechsle zum vorherigen virtuellen Terminal" +msgstr "an ein bestimmtes virtuellen Terminal anbinden" #: Programs/cmds.auto.h:835 -#, fuzzy msgid "bind to the next virtual terminal" -msgstr "wechsle zum nächsten virtuellen Terminal" +msgstr "an das nächste virtuelle Terminal anbinden" #: Programs/cmds.auto.h:829 -#, fuzzy msgid "bind to the previous virtual terminal" -msgstr "wechsle zum vorherigen virtuellen Terminal" +msgstr "an das vorhergehende virtuelle Terminal anbinden" #. #: Programs/cmd_utils.c:109 @@ -2062,7 +2053,7 @@ msgstr "blinken" msgid "blue" msgstr "Blau" -#: Programs/config.c:2692 +#: Programs/config.c:2693 #, c-format msgid "braille device not specified" msgstr "Braillegerät nicht spezifiziert" @@ -2126,9 +2117,9 @@ msgstr "kann Texttabelle nicht kompilieren" #. * 127.0.0.1 with reconnection attempts. #. #: Programs/xbrlapi.c:187 -#, fuzzy, c-format +#, c-format msgid "cannot connect to braille devices daemon brltty at %s\n" -msgstr "kann auf %s nicht mit BRLTTY verbinden\n" +msgstr "Kann nicht mit Braillegerätedienst brltty via %s verbinden\n" #: Programs/xbrlapi.c:588 #, c-format @@ -2144,7 +2135,7 @@ msgstr "kann Verzeichnis nicht erstellen" msgid "cannot determine program directory" msgstr "kann Programmverzeichnis nicht bestimmen" -#: Programs/config.c:2616 Programs/menu.c:544 +#: Programs/config.c:2617 Programs/menu.c:544 msgid "cannot determine working directory" msgstr "kann Arbeitsverzeichnis nicht bestimmen" @@ -2221,11 +2212,11 @@ msgstr "kann Einstellungsdatei nicht schreiben" #. "cap" here, used during speech output, is short for "capital". #. It is spoken just before an uppercase letter, e.g. "cap A". -#: Programs/core.c:888 +#: Programs/core.c:973 msgid "cap" msgstr "Groß" -#: Programs/menu_prefs.c:753 Programs/menu_prefs.c:1187 +#: Programs/menu_prefs.c:757 Programs/menu_prefs.c:1196 msgid "cells" msgstr "Zellen" @@ -2235,7 +2226,7 @@ msgstr "Änderungen verworfen" #: Programs/cmds.auto.h:775 msgid "clear all sticky input modifiers" -msgstr "" +msgstr "alle eingerasteten Steuertasten löschen" #: Programs/cmd_speech.c:456 msgid "column" @@ -2254,7 +2245,7 @@ msgstr "Konfigurationsdirektive mehrfach angegeben" msgid "console not in use" msgstr "Konsole nicht in Verwendung" -#: Programs/menu_prefs.c:904 +#: Programs/menu_prefs.c:913 msgid "console tone generator" msgstr "Konsolen-Tongenerator" @@ -2293,27 +2284,27 @@ msgstr "Zyan" #: Programs/cmds.auto.h:781 msgid "cycle the AltGr (Right Alt) sticky input modifier (next, on, off)" -msgstr "" +msgstr "Einrastfunktion der AltGr (rechte Alt) Taste umschalten (ändern, ein, aus)" #: Programs/cmds.auto.h:562 msgid "cycle the Control sticky input modifier (next, on, off)" -msgstr "" +msgstr "Einrastfunktion der Steuerung-Taste umschalten (ändern, ein, aus)" #: Programs/cmds.auto.h:787 msgid "cycle the GUI (Windows) sticky input modifier (next, on, off)" -msgstr "" +msgstr "Einrastfunktion der GUI (Windows) Taste umschalten (ändern, ein, aus)" #: Programs/cmds.auto.h:568 msgid "cycle the Meta (Left Alt) sticky input modifier (next, on, off)" -msgstr "" +msgstr "Einrastfunktion der Meta (linke Alt) Taste umschalten (ändern, ein, aus)" #: Programs/cmds.auto.h:550 msgid "cycle the Shift sticky input modifier (next, on, off)" -msgstr "" +msgstr "Einrastfunktion der Umschalttaste umschalten (ändern, ein, aus)" #: Programs/cmds.auto.h:556 msgid "cycle the Upper sticky input modifier (next, on, off)" -msgstr "" +msgstr "Einrastfunktion der Feststelltaste umschalten (ändern, ein, aus)" #. L #: Programs/cmd_utils.c:117 @@ -2353,7 +2344,7 @@ msgstr "Verzeichnis" #: Programs/xbrlapi.c:97 msgid "display" -msgstr "" +msgstr "display" #: Programs/cmds.auto.h:4 msgid "do nothing" @@ -2375,7 +2366,7 @@ msgstr "Punkt 8" msgid "dots 7 and 8" msgstr "Punkte 7 und 8" -#: Drivers/Braille/Baum/braille.c:1064 +#: Drivers/Braille/Baum/braille.c:1092 msgid "driver request" msgstr "Treiberanfrage" @@ -2470,14 +2461,12 @@ msgid "go backward one braille window" msgstr "Gehe eine Braillezeilenlänge zurück" #: Programs/cmds.auto.h:202 -#, fuzzy msgid "go backward skipping blank braille windows" -msgstr "Schalte Überspringen leerer Braillezeileninhalte ein/aus" +msgstr "Gehe zurück und überspringe leere Braillezeilenausschnitte" #: Programs/cmds.auto.h:843 -#, fuzzy msgid "go backward to nearest non-blank braille window" -msgstr "Gehe zum nächsten nicht leeren Braillezeileninhalt nach rechts" +msgstr "Gehe zurück zum nähesten befüllten Braillezeilenausschnitt" #: Programs/cmds.auto.h:20 msgid "go down one line" @@ -2524,14 +2513,12 @@ msgid "go forward one braille window" msgstr "Gehe eine Braillezeilenlänge vorwärts" #: Programs/cmds.auto.h:210 -#, fuzzy msgid "go forward skipping blank braille windows" -msgstr "Schalte Überspringen leerer Braillezeileninhalte ein/aus" +msgstr "Gehe vorwärts und überspringe leere Braillezeilenausschnitte" #: Programs/cmds.auto.h:851 -#, fuzzy msgid "go forward to nearest non-blank braille window" -msgstr "Gehe zum nächsten nicht leeren Braillezeileninhalt nach links" +msgstr "Gehe vorwärts zum nähesten befüllten Braillezeilenausschnitt" #: Programs/cmds.auto.h:170 msgid "go left half a braille window" @@ -2696,9 +2683,9 @@ msgstr "Pos1-Taste" #: Programs/config.c:412 msgid "identifier,..." -msgstr "" +msgstr "Bezeichnung,..." -#: Drivers/Braille/Baum/braille.c:1066 +#: Drivers/Braille/Baum/braille.c:1094 msgid "idle timeout" msgstr "Inaktivitätszeitüberschreitung" @@ -2738,11 +2725,11 @@ msgstr "ungültige Escape-Sequenz" msgid "invalid flag setting" msgstr "ungültige Schalter-Einstellung" -#: Programs/config.c:2528 +#: Programs/config.c:2529 msgid "invalid message hold timeout" msgstr "ungültige Meldungsanzeigedauer" -#: Programs/brlapi_server.c:3129 +#: Programs/brlapi_server.c:3143 msgid "invalid thread stack size" msgstr "ungültige Threadstapelgröße" @@ -2807,15 +2794,15 @@ msgstr "Magenta" msgid "missing operand" msgstr "fehlender Operand" -#: Programs/parse.c:367 +#: Programs/parse.c:428 msgid "missing parameter name" msgstr "fehlender Parametername" -#: Programs/parse.c:353 +#: Programs/parse.c:414 msgid "missing parameter qualifier" msgstr "fehlende Parameterkennzeichnung" -#: Programs/parse.c:329 +#: Programs/parse.c:390 msgid "missing parameter value" msgstr "fehlender Parameterwert" @@ -2860,7 +2847,7 @@ msgstr "Seite-Rauf Taste" msgid "percentage" msgstr "prozent" -#: Programs/config.c:2501 +#: Programs/config.c:2502 msgid "pid file not specified" msgstr "PID-Datei nicht spezifiziert" @@ -2876,9 +2863,9 @@ msgstr "Tonhöhe" msgid "place left end of braille window at character" msgstr "Positioniere linken Rand der Braillezeile bei Zeichen" -#: Drivers/Braille/Baum/braille.c:1065 +#: Drivers/Braille/Baum/braille.c:1093 msgid "power switch" -msgstr "" +msgstr "Ein-/Aus-Schalter" #: Programs/spk.c:186 msgid "rate" @@ -2893,17 +2880,17 @@ msgstr "kopiere mit Zeilenumbrüchen bis Zeichen" msgid "red" msgstr "Rot" -#: Programs/config.c:1701 +#: Programs/config.c:1702 #, c-format msgid "reinitializing braille driver" msgstr "reinitialisiere Brailletreiber" -#: Programs/config.c:2249 +#: Programs/config.c:2250 #, c-format msgid "reinitializing screen driver" msgstr "reinitialisiere Bildschirmtreiber" -#: Programs/config.c:2030 +#: Programs/config.c:2031 #, c-format msgid "reinitializing speech driver" msgstr "reinitialisiere Sprachausgabentreiber" @@ -2947,7 +2934,7 @@ msgstr "Speichert den Inhalt der Zwischenablage auf die Festplatte" msgid "save preferences to disk" msgstr "Einstellungen speichern" -#: Programs/config.c:2129 +#: Programs/config.c:2130 msgid "screen driver not loadable" msgstr "Bildschirmtreiber kann nicht geladen werden" @@ -3062,9 +3049,8 @@ msgid "set screen cursor blinking on/off" msgstr "Schalte blinkenden Bildschirmcursor ein/aus" #: Programs/cmds.auto.h:317 -#, fuzzy msgid "set screen cursor style block/underline" -msgstr "wechsle zwischen Cursordarstellung Block/Unterstreichung" +msgstr "Art des Bildschirmcursors umschalten Block/Unterstrich" #: Programs/cmds.auto.h:296 msgid "set screen cursor visibility on/off" @@ -3072,7 +3058,7 @@ msgstr "Schalte die Sichtbarkeit des Bildschirmcursors ein/aus" #: Programs/cmds.auto.h:254 msgid "set screen image frozen/unfrozen" -msgstr "" +msgstr "Standbild ein-/ausschalten" #: Programs/cmds.auto.h:289 msgid "set skipping of blank braille windows on/off" @@ -3083,9 +3069,8 @@ msgid "set skipping of lines with identical content on/off" msgstr "schalte Überspringen von Zeilen mit identischem Inhalt ein/aus" #: Programs/cmds.auto.h:275 -#, fuzzy msgid "set sliding braille window on/off" -msgstr "schalte Braillezeilenverschiebung ein/aus" +msgstr "überlappende Braillezeilenausschnitte ein-/ausschalten" #: Programs/cmds.auto.h:743 msgid "set speech cursor visibility on/off" @@ -3111,15 +3096,15 @@ msgstr "Schalte die Verfolgung des Bildschirmcursors ein/aus" msgid "show current date and time" msgstr "Aktuelles Datum und Uhrzeit anzeigen" -#: Programs/menu_prefs.c:905 +#: Programs/menu_prefs.c:914 msgid "soundcard digital audio" msgstr "Digital Audio Soundkarte" -#: Programs/menu_prefs.c:907 +#: Programs/menu_prefs.c:916 msgid "soundcard synthesizer" msgstr "Synthesizer der Soundkarte" -#: Programs/cmd.c:277 Programs/core.c:869 +#: Programs/cmd.c:277 Programs/core.c:954 msgid "space" msgstr "leer" @@ -3147,7 +3132,7 @@ msgstr "sprich vom Beginn des Bildschirms bis zur aktuellen Zeile" msgid "speak speech cursor location" msgstr "Sprich Sprachcursorposition" -#: Programs/config.c:1894 +#: Programs/config.c:1895 msgid "speech driver not loadable" msgstr "Sprachausgabentreiber kann nicht geladen werden" @@ -3164,9 +3149,8 @@ msgid "start the braille driver" msgstr "Brailletreiber starten" #: Programs/cmds.auto.h:823 -#, fuzzy msgid "start the screen driver" -msgstr "Bildschirmtreiber neu starten" +msgstr "Bildschirmtreiber starten" #: Programs/cmds.auto.h:811 msgid "start the speech driver" @@ -3181,9 +3165,8 @@ msgid "stop the braille driver" msgstr "Brailletreiber stoppen" #: Programs/cmds.auto.h:817 -#, fuzzy msgid "stop the screen driver" -msgstr "Parameter für den Bildschirmtreiber." +msgstr "Bildschirmtreiber stoppen" #: Programs/cmds.auto.h:805 msgid "stop the speech driver" @@ -3249,7 +3232,7 @@ msgstr "unbekannte Protokollierungsausführlichkeit oder Kategorie" msgid "unknown option" msgstr "unbekannte Option" -#: Programs/parse.c:396 +#: Programs/parse.c:457 msgid "unsupported parameter" msgstr "nicht unterstützter Parameter" @@ -3278,14 +3261,14 @@ msgid "xbrlapi: X Error %d, %s on display %s\n" msgstr "" #: Programs/xbrlapi.c:415 -#, fuzzy, c-format +#, c-format msgid "xbrlapi: bad format for VT number\n" -msgstr "ungültiges Format für VT Nummer\n" +msgstr "xbrlapi: ungültiges Format für VT Nummer\n" #: Programs/xbrlapi.c:418 -#, fuzzy, c-format +#, c-format msgid "xbrlapi: bad type for VT number\n" -msgstr "ungültiger Typ für VT Nummer\n" +msgstr "xbrlapi: ungültiger Typ für VT Nummer\n" #: Programs/xbrlapi.c:397 #, c-format @@ -3313,9 +3296,9 @@ msgid "xbrlapi: didn't grab window %#010lx but got focus\n" msgstr "" #: Programs/xbrlapi.c:406 -#, fuzzy, c-format +#, c-format msgid "xbrlapi: more than one item for VT number\n" -msgstr "ungültiges Format für VT Nummer\n" +msgstr "xbrlapi: mehr als ein Element für VT Nummer\n" #: Programs/xbrlapi.c:391 #, c-format @@ -3323,9 +3306,9 @@ msgid "xbrlapi: no XFree86_VT atom\n" msgstr "" #: Programs/xbrlapi.c:402 -#, fuzzy, c-format +#, c-format msgid "xbrlapi: no items for VT number\n" -msgstr "ungültiger Typ für VT Nummer\n" +msgstr "xbrlapi: keine Elemente für VT Nummer\n" #: Programs/xbrlapi.c:374 #, c-format @@ -3334,9 +3317,9 @@ msgstr "" #. "shouldn't happen" events #: Programs/xbrlapi.c:738 -#, fuzzy, c-format +#, c-format msgid "xbrlapi: unhandled event type: %d\n" -msgstr "unbehandelter Ereignistyp: %d\n" +msgstr "xbrlapi: unbehandelter Ereignistyp: %d\n" #: Programs/xbrlapi.c:717 #, c-format diff --git a/Messages/fr.po b/Messages/fr.po index e58ac919..32e7b5a7 100644 --- a/Messages/fr.po +++ b/Messages/fr.po @@ -1,14 +1,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Messages/zh.po b/Messages/zh.po index 5c2cbf00..cea8c929 100644 --- a/Messages/zh.po +++ b/Messages/zh.po @@ -1,14 +1,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/Makefile.in b/Programs/Makefile.in index df05667c..0016035a 100644 --- a/Programs/Makefile.in +++ b/Programs/Makefile.in @@ -2,29 +2,37 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # # This software is maintained by Dave Mielke . ############################################################################### -all: all-brltty brltty-trtxt$X brltty-ttb$X brltty-atb$X brltty-ctb$X all-brltty-ktb brltty-tune$X $(ALL_API_BINDINGS) $(ALL_XBRLAPI) -everything: all all-brltest all-scrtest all-spktest $(ALL_API) +all: all-brltty all-brltty-trtxt all-brltty-ttb all-brltty-atb $(ALL_BRLTTY_CTB) all-brltty-ktb all-brltty-tune $(ALL_XBRLAPI) $(ALL_API_BINDINGS) all-brltty: brltty$X $(BRAILLE_DRIVERS) $(SPEECH_DRIVERS) $(SCREEN_DRIVERS) +all-brltty-trtxt: brltty-trtxt$X +all-brltty-ttb: brltty-ttb$X +all-brltty-atb: brltty-atb$X +all-brltty-ctb: brltty-ctb$X +all-brltty-ktb: brltty-ktb$X $(BRAILLE_DRIVERS) +all-brltty-tune: brltty-tune$X +all-xbrlapi: xbrlapi$X + +everything: all all-brltest all-scrtest all-spktest $(ALL_API) all-brltest: brltest$X $(BRAILLE_DRIVERS) all-spktest: spktest$X $(SPEECH_DRIVERS) all-scrtest: scrtest$X $(SCREEN_DRIVERS) -all-brltty-ktb: brltty-ktb$X $(BRAILLE_DRIVERS) -all-api: apitest$X $(ALL_XBRLAPI) $(ALL_API_BINDINGS) -all-xbrlapi: xbrlapi$X + +all-api: all-apitest +all-apitest: apitest$X ############################################################################### @@ -501,16 +509,25 @@ check-attributes-tables: brltty-atb$X ############################################################################### +ctb_compile.$O: + $(CC) $(LIBCFLAGS) $(ICU_INCLUDES) -c $(SRC_DIR)/ctb_compile.c + ctb_translate.$O: $(CC) $(LIBCFLAGS) $(ICU_INCLUDES) -c $(SRC_DIR)/ctb_translate.c -ctb_compile.$O: - $(CC) $(LIBCFLAGS) $(ICU_INCLUDES) -c $(SRC_DIR)/ctb_compile.c +ctb_native.$O: + $(CC) $(LIBCFLAGS) -c $(SRC_DIR)/ctb_native.c + +ctb_external.$O: + $(CC) $(LIBCFLAGS) -c $(SRC_DIR)/ctb_external.c + +ctb_louis.$O: + $(CC) $(LIBCFLAGS) $(LOUIS_INCLUDES) -c $(SRC_DIR)/ctb_louis.c -BRLTTY_CTB_OBJECTS = brltty-ctb.$O $(PROGRAM_OBJECTS) $(PREFS_OBJECTS) dataarea.$O $(TTB_OBJECTS) ctb_compile.$O ctb_translate.$O +BRLTTY_CTB_OBJECTS = brltty-ctb.$O $(PROGRAM_OBJECTS) $(PREFS_OBJECTS) dataarea.$O $(TTB_OBJECTS) $(CTB_OBJECTS) brltty-ctb$X: $(BRLTTY_CTB_OBJECTS) - $(CC) $(LDFLAGS) -o $@ $(BRLTTY_CTB_OBJECTS) $(LDLIBS) + $(CC) $(LDFLAGS) -o $@ $(BRLTTY_CTB_OBJECTS) $(LOUIS_LIBS) $(LDLIBS) brltty-ctb.$O: $(CC) $(CFLAGS) -c $(SRC_DIR)/brltty-ctb.c @@ -740,7 +757,7 @@ learn.$O: ############################################################################### BRLTTY_OBJECTS = brltty.$O $(CORE_OBJECTS) -BRLTTY_LIBRARIES = $(BRAILLE_DRIVER_LIBRARIES) $(SPEECH_DRIVER_LIBRARIES) $(SCREEN_DRIVER_LIBRARIES) $(SERVICE_LIBS) $(PCM_LIBS) $(MIDI_LIBS) $(USB_LIBS) $(BLUETOOTH_LIBS) $(LDLIBS) +BRLTTY_LIBRARIES = $(BRAILLE_DRIVER_LIBRARIES) $(SPEECH_DRIVER_LIBRARIES) $(SCREEN_DRIVER_LIBRARIES) $(SERVICE_LIBS) $(PCM_LIBS) $(MIDI_LIBS) $(USB_LIBS) $(BLUETOOTH_LIBS) $(LOUIS_LIBS) $(POLKIT_LIBS) $(LDLIBS) brltty$X: $(BRLTTY_OBJECTS) $(CC) $(LDFLAGS) -o $@ $(BRLTTY_OBJECTS) $(BRLTTY_LIBRARIES) @@ -930,18 +947,20 @@ check-all: check-text-tables check-attributes-tables check-contraction-tables ch ############################################################################### -install:: install-programs install-tables $(INSTALL_DRIVERS) install-core-headers $(INSTALL_MESSAGES) install-manpages install-metainfo $(INSTALL_API) +install:: install-programs install-tables $(INSTALL_DRIVERS) install-core-headers $(INSTALL_MESSAGES) install-manpages $(INSTALL_API) -install-programs: brltty$X brltty-trtxt$X brltty-ttb$X brltty-atb$X brltty-ctb$X brltty-ktb$X brltty-tune$X install-program-directory install-writable-directory +install-programs: brltty$X brltty-trtxt$X brltty-ttb$X brltty-atb$X $(INSTALL_BRLTTY_CTB) brltty-ktb$X brltty-tune$X install-program-directory install-writable-directory $(INSTALL_PROGRAM) brltty$X $(INSTALL_PROGRAM_DIRECTORY) $(INSTALL_PROGRAM) brltty-trtxt$X $(INSTALL_PROGRAM_DIRECTORY) $(INSTALL_PROGRAM) brltty-ttb$X $(INSTALL_PROGRAM_DIRECTORY) $(INSTALL_PROGRAM) brltty-atb$X $(INSTALL_PROGRAM_DIRECTORY) - $(INSTALL_PROGRAM) brltty-ctb$X $(INSTALL_PROGRAM_DIRECTORY) $(INSTALL_PROGRAM) brltty-ktb$X $(INSTALL_PROGRAM_DIRECTORY) $(INSTALL_PROGRAM) brltty-tune$X $(INSTALL_PROGRAM_DIRECTORY) $(INSTALL_DATA) $(BLD_TOP)config.sh $(INSTALL_PROGRAM_DIRECTORY)/brltty-config +install-brltty-ctb: brltty-ctb$X install-program-directory + $(INSTALL_PROGRAM) brltty-ctb$X $(INSTALL_PROGRAM_DIRECTORY) + XBRLAPI_X11_AUTOSTART_FILE = 60xbrlapi XBRLAPI_GDM_AUTOSTART_FILE = xbrlapi.desktop @@ -999,10 +1018,6 @@ install-documents: install-document-directory brltty-ktb$X $(BRAILLE_DRIVERS) cd $(BLD_TOP)$(DOC_DIR) && $(MAKE) all $(SRC_TOP)mkdocs -o $(INSTALL_DOCUMENT_DIRECTORY) -s $(SRC_TOP) -b $(BLD_TOP) -d $(DOC_DIR) -t $(TBL_DIR) -METAINFO_FILE = org.a11y.brltty.metainfo.xml -install-metainfo: install-metainfo-directory - $(INSTALL_DATA) $(SRC_TOP)Autostart/AppStream/$(METAINFO_FILE) $(INSTALL_METAINFO_DIRECTORY) - install-api: $(INSTALL_API_LIBRARIES) install-api-headers install-api-manpages install-api-key install-api-policy $(INSTALL_XBRLAPI) $(INSTALL_API_BINDINGS) install-api-libraries: $(API_LIB) $(API_ARC) install-apilib-directory install-apisoc-directory @@ -1044,7 +1059,7 @@ install-api-policy: install-apipol-directory ############################################################################### -uninstall:: uninstall-programs uninstall-tables uninstall-drivers uninstall-messages uninstall-manpages uninstall-documents uninstall-headers uninstall-metainfo uninstall-api-bindings uninstall-api-files +uninstall:: uninstall-programs uninstall-tables uninstall-drivers uninstall-messages uninstall-manpages uninstall-documents uninstall-headers uninstall-api-bindings uninstall-api-files uninstall-programs: -rm -f $(INSTALL_PROGRAM_DIRECTORY)/brltty$X @@ -1081,9 +1096,6 @@ uninstall-headers: -rm -f $(INSTALL_APIHDR_DIRECTORY)/brlapi_*.h -[ ! -d $(INSTALL_INCLUDE_DIRECTORY) ] || rm -f -r $(INSTALL_INCLUDE_DIRECTORY) -uninstall-metainfo: - -rm -f $(INSTALL_METAINFO_DIRECTORY)/$(METAINFO_FILE) - uninstall-api-libraries: -rm -f $(INSTALL_APILIB_DIRECTORY)/$(API_LIB) -rm -f $(INSTALL_APILIB_DIRECTORY)/$(API_LIB).$(API_VERSION) diff --git a/Programs/activity.c b/Programs/activity.c index 51fc841e..af52ff88 100644 --- a/Programs/activity.c +++ b/Programs/activity.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -214,7 +214,7 @@ prepareActivity (ActivityObject *activity) { static int scheduleActivity (ActivityObject *activity) { - if (asyncSetAlarmIn(&activity->startAlarm, 0, handleActivityStartAlarm, activity)) { + if (asyncNewRelativeAlarm(&activity->startAlarm, 0, handleActivityStartAlarm, activity)) { if (asyncResetAlarmEvery(activity->startAlarm, activity->methods->retryInterval)) { setActivityState(activity, ACT_SCHEDULED); return 1; diff --git a/Programs/activity.h b/Programs/activity.h index 1a8c7df2..75ff8cbc 100644 --- a/Programs/activity.h +++ b/Programs/activity.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/addresses.c b/Programs/addresses.c index 4d981a52..ba91272d 100644 --- a/Programs/addresses.c +++ b/Programs/addresses.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/alert.c b/Programs/alert.c index 5b185784..360a33f9 100644 --- a/Programs/alert.c +++ b/Programs/alert.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -168,6 +168,10 @@ static const AlertEntry alertTable[] = { .message = strtext("Autorelease"), .tune = "c6@50 b- g e- p50 c@100 c c" }, + + [ALERT_SCROLL_UP] = { + .tune = "b6@10 d7" + }, }; static ToneElement *tuneTable[ARRAY_COUNT(alertTable)] = {NULL}; diff --git a/Programs/api.h b/Programs/api.h index 39b9511b..ec499c6b 100644 --- a/Programs/api.h +++ b/Programs/api.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Programs/api_control.c b/Programs/api_control.c index 00fd53e6..d9820dea 100644 --- a/Programs/api_control.c +++ b/Programs/api_control.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/api_control.h b/Programs/api_control.h index 8b1c49af..67ee2e23 100644 --- a/Programs/api_control.h +++ b/Programs/api_control.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/api_server.h b/Programs/api_server.h index cb5532ff..671b6785 100644 --- a/Programs/api_server.h +++ b/Programs/api_server.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/apitest.c b/Programs/apitest.c index ef84eb6c..367bb72d 100644 --- a/Programs/apitest.c +++ b/Programs/apitest.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -17,7 +17,7 @@ */ /* apitest provides a small test utility for BRLTTY's API */ - + #include "prologue.h" #include @@ -34,10 +34,13 @@ #include "brlapi.h" static brlapi_connectionSettings_t settings; +static char *opt_host; +static char *opt_auth; static int opt_learnMode; static int opt_showDots; static int opt_showName; +static int opt_showModelIdentifier; static int opt_showSize; static int opt_showKeyCodes; static int opt_suspendMode; @@ -49,6 +52,13 @@ BEGIN_OPTION_TABLE(programOptions) .description = "Show the name of the braille driver." }, + { .letter = 'm', + .word = "model", + .setting.flag = &opt_showModelIdentifier, + .description = "Show the model identifier of the braille device." + }, + + { .letter = 'w', .word = "window", .setting.flag = &opt_showSize, @@ -82,14 +92,14 @@ BEGIN_OPTION_TABLE(programOptions) { .letter = 'b', .word = "brlapi", .argument = "[host][:port]", - .setting.string = &settings.host, + .setting.string = &opt_host, .description = "BrlAPIa host and/or port to connect to." }, { .letter = 'a', .word = "auth", .argument = "file", - .setting.string = &settings.auth, + .setting.string = &opt_auth, .description = "BrlAPI authorization/authentication string." }, END_OPTION_TABLE @@ -116,6 +126,17 @@ static void showDriverName(void) fprintf(stderr, "%s\n", name); } +static void showModelIdentifier(void) +{ + char identifier[30]; + fprintf(stderr, "Getting model identifier: "); + if (brlapi_getModelIdentifier(identifier, sizeof(identifier))<0) { + brlapi_perror("failed"); + exit(PROG_EXIT_FATAL); + } + fprintf(stderr, "%s\n", identifier); +} + #define DOTS_TEXT "dots: " #define DOTS_TEXTLEN (strlen(DOTS_TEXT)) #define DOTS_LEN 8 @@ -266,7 +287,6 @@ int main (int argc, char *argv[]) { ProgramExitStatus exitStatus = PROG_EXIT_SUCCESS; brlapi_fileDescriptor fd; - settings.host = NULL; settings.auth = NULL; { static const OptionsDescriptor descriptor = { @@ -276,6 +296,8 @@ main (int argc, char *argv[]) { PROCESS_OPTIONS(descriptor, argc, argv); } + settings.host = opt_host; + settings.auth = opt_auth; fprintf(stderr, "Connecting to BrlAPI... "); if ((fd=brlapi_openConnection(&settings, &settings)) != (brlapi_fileDescriptor)(-1)) { fprintf(stderr, "done (fd=%"PRIfd")\n", fd); @@ -285,6 +307,10 @@ main (int argc, char *argv[]) { showDriverName(); } + if (opt_showModelIdentifier) { + showModelIdentifier(); + } + if (opt_showSize) { showDisplaySize(); } @@ -306,7 +332,7 @@ main (int argc, char *argv[]) { } brlapi_closeConnection(); - fprintf(stderr, "Disconnected\n"); + fprintf(stderr, "Disconnected\n"); } else { fprintf(stderr, "failed to connect to %s using auth %s",settings.host, settings.auth); brlapi_perror(""); diff --git a/Programs/async_alarm.c b/Programs/async_alarm.c index d16ad669..a556ec3f 100644 --- a/Programs/async_alarm.c +++ b/Programs/async_alarm.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -159,7 +159,7 @@ newAlarmElement (const void *parameters) { } int -asyncSetAlarmTo ( +asyncNewAbsoluteAlarm ( AsyncHandle *handle, const TimeValue *time, AsyncAlarmCallback *callback, @@ -175,17 +175,17 @@ asyncSetAlarmTo ( } int -asyncSetAlarmIn ( +asyncNewRelativeAlarm ( AsyncHandle *handle, - int interval, + int milliseconds, AsyncAlarmCallback *callback, void *data ) { TimeValue time; getMonotonicTime(&time); - adjustTimeValue(&time, interval); - return asyncSetAlarmTo(handle, &time, callback, data); + adjustTimeValue(&time, milliseconds); + return asyncNewAbsoluteAlarm(handle, &time, callback, data); } static Element * @@ -209,22 +209,22 @@ asyncResetAlarmTo (AsyncHandle handle, const TimeValue *time) { } int -asyncResetAlarmIn (AsyncHandle handle, int interval) { +asyncResetAlarmIn (AsyncHandle handle, int milliseconds) { TimeValue time; getMonotonicTime(&time); - adjustTimeValue(&time, interval); + adjustTimeValue(&time, milliseconds); return asyncResetAlarmTo(handle, &time); } int -asyncResetAlarmEvery (AsyncHandle handle, int interval) { +asyncResetAlarmEvery (AsyncHandle handle, int milliseconds) { Element *element = getAlarmElement(handle); if (element) { AlarmEntry *alarm = getElementItem(element); - alarm->interval = interval; + alarm->interval = milliseconds; alarm->reschedule = 1; return 1; } diff --git a/Programs/async_data.c b/Programs/async_data.c index 16ea8477..a2081819 100644 --- a/Programs/async_data.c +++ b/Programs/async_data.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/async_event.c b/Programs/async_event.c index 3137e76e..625e41f8 100644 --- a/Programs/async_event.c +++ b/Programs/async_event.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/async_handle.c b/Programs/async_handle.c index c2fc9e8e..cef399da 100644 --- a/Programs/async_handle.c +++ b/Programs/async_handle.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/async_internal.h b/Programs/async_internal.h index a2bac054..bf39443f 100644 --- a/Programs/async_internal.h +++ b/Programs/async_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/async_io.c b/Programs/async_io.c index 89530275..20103582 100644 --- a/Programs/async_io.c +++ b/Programs/async_io.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/async_signal.c b/Programs/async_signal.c index 0602b29c..f243436e 100644 --- a/Programs/async_signal.c +++ b/Programs/async_signal.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/async_task.c b/Programs/async_task.c index 2d75aa5a..4863ec91 100644 --- a/Programs/async_task.c +++ b/Programs/async_task.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/async_wait.c b/Programs/async_wait.c index cdbc586b..823f308b 100644 --- a/Programs/async_wait.c +++ b/Programs/async_wait.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/atb_compile.c b/Programs/atb_compile.c index a1e94529..f5efe575 100644 --- a/Programs/atb_compile.c +++ b/Programs/atb_compile.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/atb_internal.h b/Programs/atb_internal.h index a4c5f185..1809c609 100644 --- a/Programs/atb_internal.h +++ b/Programs/atb_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/atb_translate.c b/Programs/atb_translate.c index 0b0f8eaa..36bb7b1f 100644 --- a/Programs/atb_translate.c +++ b/Programs/atb_translate.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/auth.c b/Programs/auth.c index 83c3519d..3c4a955b 100644 --- a/Programs/auth.c +++ b/Programs/auth.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep.c b/Programs/beep.c index dd5505d1..3ef2b3ed 100644 --- a/Programs/beep.c +++ b/Programs/beep.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep_linux.c b/Programs/beep_linux.c index b34634ee..54439ba4 100644 --- a/Programs/beep_linux.c +++ b/Programs/beep_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep_msdos.c b/Programs/beep_msdos.c index 217b1a6a..4cd805fb 100644 --- a/Programs/beep_msdos.c +++ b/Programs/beep_msdos.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep_none.c b/Programs/beep_none.c index adb18212..f3ad5d3d 100644 --- a/Programs/beep_none.c +++ b/Programs/beep_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep_solaris.c b/Programs/beep_solaris.c index 8466f8f3..7da64edb 100644 --- a/Programs/beep_solaris.c +++ b/Programs/beep_solaris.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep_spkr.c b/Programs/beep_spkr.c index e4f5d27d..093b8a9a 100644 --- a/Programs/beep_spkr.c +++ b/Programs/beep_spkr.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep_windows.c b/Programs/beep_windows.c index fb585acf..b772a419 100644 --- a/Programs/beep_windows.c +++ b/Programs/beep_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/beep_wskbd.c b/Programs/beep_wskbd.c index 7bf8dc15..731d3006 100644 --- a/Programs/beep_wskbd.c +++ b/Programs/beep_wskbd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bell.c b/Programs/bell.c index bd83834f..b0916dbb 100644 --- a/Programs/bell.c +++ b/Programs/bell.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bell_linux.c b/Programs/bell_linux.c index 2af2702a..c0298672 100644 --- a/Programs/bell_linux.c +++ b/Programs/bell_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bell_none.c b/Programs/bell_none.c index 04f6c3e3..d2f5e8d9 100644 --- a/Programs/bell_none.c +++ b/Programs/bell_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/blink.c b/Programs/blink.c index 52d8dc18..2a71c5da 100644 --- a/Programs/blink.c +++ b/Programs/blink.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -109,7 +109,7 @@ ASYNC_ALARM_CALLBACK(handleBlinkAlarm) { static void setBlinkAlarm (BlinkDescriptor *blink) { - asyncSetAlarmIn(&blink->alarmHandle, getBlinkDuration(blink), handleBlinkAlarm, blink); + asyncNewRelativeAlarm(&blink->alarmHandle, getBlinkDuration(blink), handleBlinkAlarm, blink); } static void diff --git a/Programs/blink.h b/Programs/blink.h index 570b90c4..01671e4e 100644 --- a/Programs/blink.h +++ b/Programs/blink.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bluetooth.c b/Programs/bluetooth.c index 80557469..78d942bc 100644 --- a/Programs/bluetooth.c +++ b/Programs/bluetooth.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -636,6 +636,6 @@ bthGetDriverCodes (const char *identifier, int timeout) { } int -isBluetoothDevice (const char **identifier) { - return isQualifiedDevice(identifier, "bluetooth"); +isBluetoothDeviceIdentifier (const char **identifier) { + return hasQualifier(identifier, "bluetooth"); } diff --git a/Programs/bluetooth_android.c b/Programs/bluetooth_android.c index 817751f8..755306f1 100644 --- a/Programs/bluetooth_android.c +++ b/Programs/bluetooth_android.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bluetooth_darwin.c b/Programs/bluetooth_darwin.c index 301f1be5..8a28ce9a 100644 --- a/Programs/bluetooth_darwin.c +++ b/Programs/bluetooth_darwin.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bluetooth_internal.h b/Programs/bluetooth_internal.h index 72a0554b..125e5781 100644 --- a/Programs/bluetooth_internal.h +++ b/Programs/bluetooth_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bluetooth_linux.c b/Programs/bluetooth_linux.c index f3dcc90f..bc56cfef 100644 --- a/Programs/bluetooth_linux.c +++ b/Programs/bluetooth_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bluetooth_names.c b/Programs/bluetooth_names.c index 24156462..bbd59edc 100644 --- a/Programs/bluetooth_names.c +++ b/Programs/bluetooth_names.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -33,6 +33,7 @@ BLUETOOTH_NAME_DRIVERS(BaumSuperVario, "bm"); BLUETOOTH_NAME_DRIVERS(BaumSVario, "bm"); BLUETOOTH_NAME_DRIVERS(BrailleConnect, "bm"); BLUETOOTH_NAME_DRIVERS(BrailleEdge, "hm"); +BLUETOOTH_NAME_DRIVERS(BrailleMe, "ic"); BLUETOOTH_NAME_DRIVERS(BrailleMemoPocket, "mm"); BLUETOOTH_NAME_DRIVERS(BrailleMemoSmart, "mm"); BLUETOOTH_NAME_DRIVERS(BrailleMemo32, "mm"); @@ -46,12 +47,14 @@ BLUETOOTH_NAME_DRIVERS(Braillino, "ht"); BLUETOOTH_NAME_DRIVERS(B2G, "bm"); BLUETOOTH_NAME_DRIVERS(Conny, "bm"); BLUETOOTH_NAME_DRIVERS(EL12, "al", "vo"); +BLUETOOTH_NAME_DRIVERS(Eurobraille, "eu"); BLUETOOTH_NAME_DRIVERS(Focus, "fs"); BLUETOOTH_NAME_DRIVERS(HWGBrailliant, "bm"); BLUETOOTH_NAME_DRIVERS(MB248, "md"); BLUETOOTH_NAME_DRIVERS(OrbitReader, "bm"); BLUETOOTH_NAME_DRIVERS(Pronto, "bm"); BLUETOOTH_NAME_DRIVERS(Refreshabraille, "bm"); +BLUETOOTH_NAME_DRIVERS(SmartBeetle, "hm"); BLUETOOTH_NAME_DRIVERS(SuperVario, "bm"); BLUETOOTH_NAME_DRIVERS(TSM, "sk"); BLUETOOTH_NAME_DRIVERS(VarioConnect, "bm"); @@ -106,6 +109,10 @@ const BluetoothNameEntry bluetoothNameTable[] = { .driverCodes = bluetoothNameDrivers_BrailleEdge }, + { .namePrefix = "BrailleMe", + .driverCodes = bluetoothNameDrivers_BrailleMe + }, + { .namePrefix = "BMpk", .driverCodes = bluetoothNameDrivers_BrailleMemoPocket }, @@ -158,6 +165,10 @@ const BluetoothNameEntry bluetoothNameTable[] = { .driverCodes = bluetoothNameDrivers_EL12 }, + { .namePrefix = "Esys-", + .driverCodes = bluetoothNameDrivers_Eurobraille + }, + { .namePrefix = "Focus", .driverCodes = bluetoothNameDrivers_Focus }, @@ -182,6 +193,10 @@ const BluetoothNameEntry bluetoothNameTable[] = { .driverCodes = bluetoothNameDrivers_Refreshabraille }, + { .namePrefix = "SmartBeetle", + .driverCodes = bluetoothNameDrivers_SmartBeetle + }, + { .namePrefix = "SuperVario", .driverCodes = bluetoothNameDrivers_SuperVario }, diff --git a/Programs/bluetooth_none.c b/Programs/bluetooth_none.c index d6a99d54..3a38681d 100644 --- a/Programs/bluetooth_none.c +++ b/Programs/bluetooth_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/bluetooth_windows.c b/Programs/bluetooth_windows.c index d8962c6f..fa853c31 100644 --- a/Programs/bluetooth_windows.c +++ b/Programs/bluetooth_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brl.c b/Programs/brl.c index b40d3072..0319784a 100644 --- a/Programs/brl.c +++ b/Programs/brl.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brl.h b/Programs/brl.h index 54b7cbe5..b49ed6f8 100644 --- a/Programs/brl.h +++ b/Programs/brl.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brl_base.c b/Programs/brl_base.c index 0e38a84a..5aa11643 100644 --- a/Programs/brl_base.c +++ b/Programs/brl_base.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -365,8 +365,8 @@ setBrailleMessageAlarm (BrailleDisplay *brl) { if (brl->acknowledgements.alarm) { asyncResetAlarmIn(brl->acknowledgements.alarm, brl->acknowledgements.missing.timeout); } else { - asyncSetAlarmIn(&brl->acknowledgements.alarm, brl->acknowledgements.missing.timeout, - handleBrailleMessageTimeout, brl); + asyncNewRelativeAlarm(&brl->acknowledgements.alarm, brl->acknowledgements.missing.timeout, + handleBrailleMessageTimeout, brl); } } diff --git a/Programs/brl_cmds.awk b/Programs/brl_cmds.awk index 5020f765..d612d381 100644 --- a/Programs/brl_cmds.awk +++ b/Programs/brl_cmds.awk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/brl_driver.c b/Programs/brl_driver.c index e223357c..15bd3788 100644 --- a/Programs/brl_driver.c +++ b/Programs/brl_driver.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -46,7 +46,6 @@ connectResource (BrailleDisplay *brl, const char *identifier) { static int brl_construct (BrailleDisplay *brl, char **parameters, const char *device) { if (connectResource(brl, "null:")) { - brl->keyBindings = NULL; return 1; } diff --git a/Programs/brl_input.c b/Programs/brl_input.c index cc52309d..3a69db58 100644 --- a/Programs/brl_input.c +++ b/Programs/brl_input.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brl_input.h b/Programs/brl_input.h index 9934ed39..6e572fc4 100644 --- a/Programs/brl_input.h +++ b/Programs/brl_input.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brl_utils.c b/Programs/brl_utils.c index a7206c39..c157f97d 100644 --- a/Programs/brl_utils.c +++ b/Programs/brl_utils.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brlapi.awk b/Programs/brlapi.awk index 449ba9c6..64f21342 100644 --- a/Programs/brlapi.awk +++ b/Programs/brlapi.awk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -55,4 +55,3 @@ BEGIN { apiRangeType(substr($1, 18), $1, apiRangeTypeCount++, "") next } - diff --git a/Programs/brlapi.h.in b/Programs/brlapi.h.in index b49e8c6e..b35956d7 100644 --- a/Programs/brlapi.h.in +++ b/Programs/brlapi.h.in @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2002-2017 by + * Copyright (C) 2002-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -116,7 +116,7 @@ size_t BRLAPI_STDCALL brlapi_getHandleSize(void); * @{ */ /** Default port number on which connections to \e BrlAPI can be established */ -#define BRLAPI_SOCKETPORTNUM 4101 +#define BRLAPI_SOCKETPORTNUM 4101 #define BRLAPI_SOCKETPORT "4101" /** Default unix path on which connections to \e BrlAPI can be established */ @@ -137,8 +137,16 @@ size_t BRLAPI_STDCALL brlapi_getHandleSize(void); #ifdef BRLAPI_WIN32 /* No authentication by default on Windows */ #define BRLAPI_DEFAUTH "none" -#else -#define BRLAPI_DEFAUTH "polkit+keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE +#else /* BRLAPI_WIN32 */ +#define BRLAPI_DEFAUTH_KEYFILE "keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE + +#ifdef USE_POLKIT +#define BRLAPI_DEFAUTH_POLKIT "+polkit" +#else /* USE_POLKIT */ +#define BRLAPI_DEFAUTH_POLKIT "" +#endif /* USE_POLKIT */ + +#define BRLAPI_DEFAUTH BRLAPI_DEFAUTH_KEYFILE BRLAPI_DEFAUTH_POLKIT #endif /* BRLAPI_WIN32 */ #ifdef __MINGW32__ @@ -286,19 +294,36 @@ void BRLAPI_STDCALL brlapi__closeConnection(brlapi_handle_t *handle); /** Return the complete name of the driver used by \e brltty * * This function fills its argument with the whole name of the braille - * terminal if available, terminated with a '\\0'. + * driver if available, terminated with a '\\0'. * - * \param buffer is the buffer given by the application; + * \param buffer is the buffer provided by the application; * \param size is the maximum size for the name buffer. * * \return -1 on error, or a positive value giving the size of the needed - * buffer, if the supplied one is to small (same as snprintf()). + * buffer, if the supplied one is too small (same as snprintf()). */ #ifndef BRLAPI_NO_SINGLE_SESSION int BRLAPI_STDCALL brlapi_getDriverName(char *buffer, size_t size); #endif /* BRLAPI_NO_SINGLE_SESSION */ int BRLAPI_STDCALL brlapi__getDriverName(brlapi_handle_t *handle, char *buffer, size_t size); +/* brlapi_getModelIdentifier */ +/** Return an identifier for the device model used by \e brltty + * + * This function fills its argument with the whole identifier of the braille + * device model if available, terminated with a '\\0'. + * + * \param buffer is the buffer given by the application; + * \param size is the maximum size for the identifier buffer. + * + * \return -1 on error, or a positive value giving the size of the needed + * buffer, if the supplied one is too small (same as snprintf()). +*/ +#ifndef BRLAPI_NO_SINGLE_SESSION +int BRLAPI_STDCALL brlapi_getModelIdentifier(char *buffer, size_t size); +#endif /* BRLAPI_NO_SINGLE_SESSION */ +int BRLAPI_STDCALL brlapi__getModelIdentifier(brlapi_handle_t *handle, char *buffer, size_t size); + /* brlapi_getDisplaySize */ /** Return the size of the braille display */ #ifndef BRLAPI_NO_SINGLE_SESSION @@ -312,7 +337,7 @@ int BRLAPI_STDCALL brlapi__getDisplaySize(brlapi_handle_t *handle, unsigned int * \brief How to take control of ttys for direct braille display / read * * Before being able to write on the braille display, the application must tell - * the server which tty it will handle. + * the server which tty it will handle. * * The application must also specify how braille keys will be delivered to it. * Two ways are possible: key codes and commands: @@ -444,8 +469,8 @@ int BRLAPI_STDCALL brlapi__setFocus(brlapi_handle_t *handle, int tty); * * If the string is too long, it is truncated. If it's too short, * it is padded with spaces. The text is assumed to be in the current - * locale charset, or latin1 if locales have not been initialized. - * To initialize locales, use setlocale(3). + * locale charset set by setlocale(3) if it was called, or the locale charset + * from the locale environment variables if setlocale(3) was not called. * * \param cursor gives the cursor position; if equal to ::BRLAPI_CURSOR_OFF, no cursor is shown at * all; if cursor==::BRLAPI_CURSOR_LEAVE, the cursor is left where it is @@ -812,9 +837,9 @@ typedef struct { * \note The given codes should be raw keycodes (i.e. some driver name was given * to brlapi_enterTtyMode()) */ #ifndef BRLAPI_NO_SINGLE_SESSION -int BRLAPI_STDCALL brlapi_ignoreKeyRanges(brlapi_range_t ranges[], unsigned int count); +int BRLAPI_STDCALL brlapi_ignoreKeyRanges(const brlapi_range_t ranges[], unsigned int count); #endif /* BRLAPI_NO_SINGLE_SESSION */ -int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count); +int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count); /* brlapi_acceptKeyRanges */ /** Accept some key presses from the braille keyboard @@ -828,9 +853,9 @@ int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t *handle, brlapi_range * \note The given codes should be raw keycodes (i.e. some driver name was given * to brlapi_enterTtyMode()) */ #ifndef BRLAPI_NO_SINGLE_SESSION -int BRLAPI_STDCALL brlapi_acceptKeyRanges(brlapi_range_t ranges[], unsigned int count); +int BRLAPI_STDCALL brlapi_acceptKeyRanges(const brlapi_range_t ranges[], unsigned int count); #endif /* BRLAPI_NO_SINGLE_SESSION */ -int BRLAPI_STDCALL brlapi__acceptKeyRanges(brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int count); +int BRLAPI_STDCALL brlapi__acceptKeyRanges(brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int count); /** @} */ /** \defgroup brlapi_driverspecific Driver-Specific modes diff --git a/Programs/brlapi_brldefs.awk b/Programs/brlapi_brldefs.awk index 2ebcbad7..ef1721ca 100644 --- a/Programs/brlapi_brldefs.awk +++ b/Programs/brlapi_brldefs.awk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/brlapi_client.c b/Programs/brlapi_client.c index bb227ff9..7457caa0 100644 --- a/Programs/brlapi_client.c +++ b/Programs/brlapi_client.c @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2002-2017 by + * Copyright (C) 2002-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -76,6 +76,7 @@ #endif /* HAVE_ALLOCA_H */ #ifdef linux +#include #include #include #include @@ -126,9 +127,9 @@ static void* GetProc(const char *library, const char *fun) { } #define CHECKPROC(library, name) \ - (name##Proc && name##Proc != (void*)(-1)) + (name##Proc && name##Proc != (void*)(-1)) #define CHECKGETPROC(library, name) \ - (name##Proc != (void*)(-1) && (name##Proc || (name##Proc = GetProc(library,#name)) != (void*)(-1))) + (name##Proc != (void*)(-1) && (name##Proc || (name##Proc = GetProc(library,#name)) != (void*)(-1))) #define WIN_PROC_STUB(name) typeof(name) (*name##Proc); @@ -144,8 +145,9 @@ static WIN_PROC_STUB(freeaddrinfo); #endif /* __MINGW32__ */ #endif /* WINDOWS */ -/* We need to declare these as weak external references to determine at runtime - * whether libpthread is used or not. We also can't rely on the functions prototypes. +/* We need to declare these as weak external references to determine + * at runtime whether libpthread is used or not. + * We also can't rely on the functions prototypes. */ #if defined(WINDOWS) @@ -224,6 +226,11 @@ struct brlapi_handle_t { /* Connection-specific information */ sem_t *altSem; int state; pthread_mutex_t state_mutex; + +#ifdef LC_GLOBAL_LOCALE + locale_t default_locale; +#endif /* LC_GLOBAL_LOCALE */ + /* key presses buffer, for when key presses are received instead of * acknowledgements for instance * @@ -266,6 +273,11 @@ static void brlapi_initializeHandle(brlapi_handle_t *handle) handle->altSem = NULL; handle->state = 0; pthread_mutex_init(&handle->state_mutex, NULL); + +#ifdef LC_GLOBAL_LOCALE + handle->default_locale = LC_GLOBAL_LOCALE; +#endif /* LC_GLOBAL_LOCALE */ + memset(handle->keybuf, 0, sizeof(handle->keybuf)); handle->keybuf_next = 0; handle->keybuf_nb = 0; @@ -376,7 +388,7 @@ again: } else { if ( #ifndef WINDOWS - !sem_init || !sem_post || !sem_wait || !sem_destroy || + !sem_init || !sem_post || !sem_wait || !sem_destroy || #endif /* WINDOWS */ handle->altSem) { /* This can't happen without threads */ @@ -582,7 +594,7 @@ static int tryHost(brlapi_handle_t *handle, char *hostAndPort) { addr.sin_port = htons(strtol(port, &c, 0)); if (*c) { struct servent *se; - + if (!(se = getservbyname(port,"tcp"))) { brlapi_gaierrno = h_errno; brlapi_errno=BRLAPI_ERROR_GAIERR; @@ -616,7 +628,7 @@ static int tryHost(brlapi_handle_t *handle, char *hostAndPort) { } memcpy(&addr.sin_addr,he->h_addr,he->h_length); } - + sockfd = socket(addr.sin_family, SOCK_STREAM, 0); if (sockfd<0) { brlapi_errfun = "socket"; @@ -780,6 +792,13 @@ void BRLAPI_STDCALL brlapi__closeConnection(brlapi_handle_t *handle) closeFileDescriptor(handle->fileDescriptor); handle->fileDescriptor = INVALID_FILE_DESCRIPTOR; pthread_mutex_unlock(&handle->fileDescriptor_mutex); + +#ifdef LC_GLOBAL_LOCALE + if (handle->default_locale != LC_GLOBAL_LOCALE) { + freelocale(handle->default_locale); + } +#endif /* LC_GLOBAL_LOCALE */ + #ifdef __MINGW32__ WSACleanup(); #endif /* __MINGW32__ */ @@ -955,6 +974,20 @@ int BRLAPI_STDCALL brlapi_getDriverName(char *name, size_t n) return brlapi__getDriverName(&defaultHandle, name, n); } +/* Function : brlapi_getModelIdentifier */ +/* An identifier for the model of the device used by brltty */ +int BRLAPI_STDCALL brlapi__getModelIdentifier(brlapi_handle_t *handle, char *identifier, size_t n) +{ + ssize_t res = brlapi__request(handle, BRLAPI_PACKET_GETMODELID, identifier, n); + if ((res>0) && (res<=n)) identifier[res-1] = '\0'; + return res; +} + +int BRLAPI_STDCALL brlapi_getModelIdentifier(char *identifier, size_t n) +{ + return brlapi__getModelIdentifier(&defaultHandle, identifier, n); +} + /* Function : brlapi_getDisplaySize */ /* Returns the size of the braille display */ int BRLAPI_STDCALL brlapi__getDisplaySize(brlapi_handle_t *handle, unsigned int *x, unsigned int *y) @@ -1035,7 +1068,7 @@ int BRLAPI_STDCALL brlapi__enterTtyMode(brlapi_handle_t *handle, int tty, const /* 0 can be a valid screen WINDOW 0xffffffff can not be a valid WINDOWID (top 3 bits guaranteed to be zero) */ if (tty<0) { brlapi_errno=BRLAPI_ERROR_UNKNOWNTTY; return -1; } - + if (brlapi__enterTtyModeWithPath(handle, &tty, 1, driverName)) return -1; return tty; @@ -1066,7 +1099,7 @@ int BRLAPI_STDCALL brlapi__enterTtyModeWithPath(brlapi_handle_t *handle, int *tt } if (brlapi__getDisplaySize(handle, &handle->brlx, &handle->brly)<0) return -1; - + /* Clear key buffer before taking the tty, just in case... */ pthread_mutex_lock(&handle->read_mutex); handle->keybuf_next = handle->keybuf_nb = 0; @@ -1099,9 +1132,24 @@ int BRLAPI_STDCALL brlapi__enterTtyModeWithPath(brlapi_handle_t *handle, int *tt *p = n; p++; if (n) p = mempcpy(p, driverName, n); - if ((res=brlapi__writePacketWaitForAck(handle,BRLAPI_PACKET_ENTERTTYMODE,&packet,(p-(unsigned char *)&packet))) == 0) + + if ((res=brlapi__writePacketWaitForAck(handle,BRLAPI_PACKET_ENTERTTYMODE,&packet,(p-(unsigned char *)&packet))) == 0) { handle->state |= STCONTROLLINGTTY; + } + pthread_mutex_unlock(&handle->state_mutex); + + /* Determine default charset if application did not call setlocale. */ +#ifdef LC_GLOBAL_LOCALE + const char *locale = setlocale(LC_CTYPE, NULL); + + if (!locale || !strcmp(locale, "C")) { + /* Application did not call setlocale, try to load the current locale. */ + locale_t default_locale = newlocale(LC_CTYPE_MASK, "", 0); + if (default_locale) handle->default_locale = default_locale; + } +#endif /* LC_GLOBAL_LOCALE */ + return res; } @@ -1152,7 +1200,7 @@ int BRLAPI_STDCALL brlapi_setFocus(int tty) return brlapi__setFocus(&defaultHandle, tty); } -static size_t getCharset(void *buffer, int wide) { +static size_t getCharset(brlapi_handle_t *handle, void *buffer, int wide) { char *p = buffer; const char *start = p; const char *locale = setlocale(LC_CTYPE, NULL); @@ -1165,7 +1213,11 @@ static size_t getCharset(void *buffer, int wide) { size_t length = strlen(WCHAR_CHARSET); *p++ = length; p = mempcpy(p, WCHAR_CHARSET, length); - } else if (locale && strcmp(locale, "C")) { + } else if ((locale && strcmp(locale, "C")) +#ifdef LC_GLOBAL_LOCALE + || (handle->default_locale != LC_GLOBAL_LOCALE) +#endif /* LC_GLOBAL_LOCALE */ + ) { /* not default locale, tell charset to server */ #ifdef WINDOWS UINT CP = GetACP(); @@ -1200,7 +1252,20 @@ static int brlapi___writeText(brlapi_handle_t *handle, int cursor, const void *s char *locale; int res; size_t len; + +#ifdef LC_GLOBAL_LOCALE + locale_t old_locale = 0; + + if (handle->default_locale != LC_GLOBAL_LOCALE) { + /* Temporarily load the default locale. */ + old_locale = uselocale(handle->default_locale); + } + + locale = "default locale"; +#else /* LC_GLOBAL_LOCALE */ locale = setlocale(LC_CTYPE,NULL); +#endif /* LC_GLOBAL_LOCALE */ + wa->flags = BRLAPI_WF_REGION; *((uint32_t *) p) = htonl(1); p += sizeof(uint32_t); *((uint32_t *) p) = htonl(dispSize); p += sizeof(uint32_t); @@ -1235,6 +1300,12 @@ static int brlapi___writeText(brlapi_handle_t *handle, int cursor, const void *s brlapi_libcerrno = errno; brlapi_errfun = "mbrlen"; brlapi_errno = BRLAPI_ERROR_LIBCERR; +#ifdef LC_GLOBAL_LOCALE + if (handle->default_locale != LC_GLOBAL_LOCALE) { + /* Restore application locale */ + uselocale(old_locale); + } +#endif /* LC_GLOBAL_LOCALE */ return -1; case 0: goto endcount; @@ -1269,7 +1340,7 @@ endcount: p += sizeof(uint32_t); } - if ((len = getCharset(p , wide))) { + if ((len = getCharset(handle, p , wide))) { wa->flags |= BRLAPI_WF_CHARSET; p += len; } @@ -1278,6 +1349,14 @@ endcount: pthread_mutex_lock(&handle->fileDescriptor_mutex); res = brlapi_writePacket(handle->fileDescriptor,BRLAPI_PACKET_WRITE,&packet,sizeof(wa->flags)+(p-&wa->data)); pthread_mutex_unlock(&handle->fileDescriptor_mutex); + +#ifdef LC_GLOBAL_LOCALE + if (handle->default_locale != LC_GLOBAL_LOCALE) { + /* Restore application locale */ + uselocale(old_locale); + } +#endif /* LC_GLOBAL_LOCALE */ + return res; } @@ -1429,14 +1508,31 @@ int brlapi__write(brlapi_handle_t *handle, const brlapi_writeArguments_t *s) p += sizeof(uint32_t); } else if (s->cursor!=-1) { brlapi_errno = BRLAPI_ERROR_INVALID_PARAMETER; - return -1; + return -1; } + if (s->charset) { if (!*s->charset) { - if ((strLen = getCharset(p, wide))) { +#ifdef LC_GLOBAL_LOCALE + locale_t old_locale = 0; + + if (handle->default_locale != LC_GLOBAL_LOCALE) { + /* Temporarily load the default locale. */ + old_locale = uselocale(handle->default_locale); + } +#endif /* LC_GLOBAL_LOCALE */ + + if ((strLen = getCharset(handle, p, wide))) { wa->flags |= BRLAPI_WF_CHARSET; p += strLen; } + +#ifdef LC_GLOBAL_LOCALE + if (handle->default_locale != LC_GLOBAL_LOCALE) { + /* Restore application locale */ + uselocale(old_locale); + } +#endif /* LC_GLOBAL_LOCALE */ } else { strLen = strlen(s->charset); *p++ = strLen; @@ -1445,10 +1541,12 @@ int brlapi__write(brlapi_handle_t *handle, const brlapi_writeArguments_t *s) brlapi_errno = BRLAPI_ERROR_INVALID_PARAMETER; return -1; } + memcpy(p, s->charset, strLen); p += strLen; } } + send: wa->flags = htonl(wa->flags); pthread_mutex_lock(&handle->fileDescriptor_mutex); @@ -1702,7 +1800,7 @@ done: /* Function : ignore_accept_key_range */ /* Common tasks for ignoring and unignoring key ranges */ /* what = 0 for ignoring !0 for unignoring */ -static int ignore_accept_key_ranges(brlapi_handle_t *handle, int what, brlapi_range_t ranges[], unsigned int n) +static int ignore_accept_key_ranges(brlapi_handle_t *handle, int what, const brlapi_range_t ranges[], unsigned int n) { uint32_t ints[n][4]; unsigned int i, remaining, todo; @@ -1756,12 +1854,12 @@ static int ignore_accept_keys(brlapi_handle_t *handle, int what, brlapi_rangeTyp } /* Function : brlapi_acceptKeyRanges */ -int BRLAPI_STDCALL brlapi__acceptKeyRanges(brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int n) +int BRLAPI_STDCALL brlapi__acceptKeyRanges(brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int n) { return ignore_accept_key_ranges(handle, !0, ranges, n); } -int BRLAPI_STDCALL brlapi_acceptKeyRanges(brlapi_range_t ranges[], unsigned int n) +int BRLAPI_STDCALL brlapi_acceptKeyRanges(const brlapi_range_t ranges[], unsigned int n) { return brlapi__acceptKeyRanges(&defaultHandle, ranges, n); } @@ -1778,12 +1876,12 @@ int BRLAPI_STDCALL brlapi_acceptKeys(brlapi_rangeType_t r, const brlapi_keyCode_ } /* Function : brlapi_ignoreKeyRanges */ -int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t *handle, brlapi_range_t ranges[], unsigned int n) +int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t *handle, const brlapi_range_t ranges[], unsigned int n) { return ignore_accept_key_ranges(handle, 0, ranges, n); } -int BRLAPI_STDCALL brlapi_ignoreKeyRanges(brlapi_range_t ranges[], unsigned int n) +int BRLAPI_STDCALL brlapi_ignoreKeyRanges(const brlapi_range_t ranges[], unsigned int n) { return brlapi__ignoreKeyRanges(&defaultHandle, ranges, n); } diff --git a/Programs/brlapi_common.h b/Programs/brlapi_common.h index 9b271e9c..091472ae 100644 --- a/Programs/brlapi_common.h +++ b/Programs/brlapi_common.h @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2002-2017 by + * Copyright (C) 2002-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -176,7 +176,7 @@ ssize_t BRLAPI(readPacketHeader)(brlapi_fileDescriptor fd, brlapi_packetType_t * if (res<0) { /* reports EINTR too */ LibcError("read in brlapi_readPacketHeader"); - return -1; + return -1; } else return -2; } *packetType = ntohl(header[1]); @@ -242,7 +242,7 @@ static int BRLAPI(loadAuthKey)(const char *filename, size_t *authlength, void *a LibcError("stat in loadAuthKey"); return -1; } - + if (statbuf.st_size==0) { brlapi_errno = BRLAPI_ERROR_EMPTYKEY; brlapi_errfun = "brlapi_laudAuthKey"; @@ -436,4 +436,3 @@ BRLAPI(getKeyFile)(const char *auth) *delim = 0; return ret; } - diff --git a/Programs/brlapi_constants.awk b/Programs/brlapi_constants.awk index 558e15df..f457bd0f 100644 --- a/Programs/brlapi_constants.awk +++ b/Programs/brlapi_constants.awk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/brlapi_keycodes.h b/Programs/brlapi_keycodes.h index bfddf83b..9eeec023 100644 --- a/Programs/brlapi_keycodes.h +++ b/Programs/brlapi_keycodes.h @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2002-2017 by + * Copyright (C) 2002-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -44,7 +44,7 @@ extern "C" { * * The third part is itself split into two parts: a command number and a command * value. The relative sizes of these parts vary according to the key type. - * + * * For a braille command, bits 28-16 (BRLAPI_KEY_CMD_BLK_MASK) hold the braille * command number, while bits 15-0 (BRLAPI_KEY_CMD_ARG_MASK) hold the command * value. diff --git a/Programs/brlapi_keyranges.c b/Programs/brlapi_keyranges.c index c7e03c3b..e7bd6441 100644 --- a/Programs/brlapi_keyranges.c +++ b/Programs/brlapi_keyranges.c @@ -2,20 +2,20 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * * This software is maintained by Dave Mielke . */ - + #include "prologue.h" /* Source file for range list management module */ diff --git a/Programs/brlapi_keyranges.h b/Programs/brlapi_keyranges.h index f7bcba38..4c432b09 100644 --- a/Programs/brlapi_keyranges.h +++ b/Programs/brlapi_keyranges.h @@ -2,20 +2,20 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * * This software is maintained by Dave Mielke . */ - + #ifndef BRLAPI_INCLUDED_KEYRANGES #define BRLAPI_INCLUDED_KEYRANGES @@ -33,7 +33,7 @@ typedef uint64_t KeyrangeElem; #define KeyrangeVal(v) ((v) & 0xffffffffull) #define KeyrangeElem(flags,val) (((KeyrangeElem)(flags) << 32) | (val)) - + typedef struct KeyrangeList { uint32_t minFlags, maxFlags; diff --git a/Programs/brlapi_keytab.awk b/Programs/brlapi_keytab.awk index f7ccdda3..89f06b95 100644 --- a/Programs/brlapi_keytab.awk +++ b/Programs/brlapi_keytab.awk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/brlapi_protocol.h b/Programs/brlapi_protocol.h index 540f091d..31cf01d5 100644 --- a/Programs/brlapi_protocol.h +++ b/Programs/brlapi_protocol.h @@ -1,7 +1,7 @@ /* * libbrlapi - A library providing access to braille terminals for applications. * - * Copyright (C) 2002-2017 by + * Copyright (C) 2002-2018 by * Samuel Thibault * Sébastien Hinderer * @@ -58,6 +58,7 @@ extern "C" { #define BRLAPI_PACKET_VERSION 'v' /**< Version */ #define BRLAPI_PACKET_AUTH 'a' /**< Authorization */ #define BRLAPI_PACKET_GETDRIVERNAME 'n' /**< Ask which driver is used */ +#define BRLAPI_PACKET_GETMODELID 'd' /**< Ask which model is used */ #define BRLAPI_PACKET_GETDISPLAYSIZE 's' /**< Dimensions of brl display */ #define BRLAPI_PACKET_ENTERTTYMODE 't' /**< Asks for a specified tty */ #define BRLAPI_PACKET_SETFOCUS 'F' /**< Set current tty focus */ @@ -245,7 +246,6 @@ ssize_t brlapi_readPacket(brlapi_fileDescriptor fd, brlapi_packetType_t *type, v * - brlapi_leaveRawMode() * - brlapi_sendRaw() * - brlapi_recvRaw() - * - brlapi_getDriverId() * - brlapi_getDriverName() * - brlapi_getDisplaySize() * - brlapi_enterTtyMode() diff --git a/Programs/brlapi_server.c b/Programs/brlapi_server.c index 9591d33e..5887f7e9 100644 --- a/Programs/brlapi_server.c +++ b/Programs/brlapi_server.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -29,7 +29,7 @@ #endif /* PTHREAD_STACK_MIN */ #define RELEASE "BrlAPI Server: release " BRLAPI_RELEASE -#define COPYRIGHT " Copyright (C) 2002-2017 by Sébastien Hinderer , \ +#define COPYRIGHT " Copyright (C) 2002-2018 by Sébastien Hinderer , \ Samuel Thibault " #include "prologue.h" @@ -155,7 +155,7 @@ static brlapi_error_t brlapiserver_error; #define BRLAPI(fun) brlapiserver_ ## fun #include "brlapi_common.h" - + /** ask for \e brltty commands */ #define BRL_COMMANDS 0 /** ask for raw driver keycodes */ @@ -192,7 +192,7 @@ typedef struct { PacketState state; int readBytes; /* Already read bytes */ unsigned char *p; /* Where read() should load datas */ - int n; /* Value to give so read() */ + int n; /* Value to give so read() */ #ifdef __MINGW32__ OVERLAPPED overl; #endif /* __MINGW32__ */ @@ -538,6 +538,7 @@ typedef int(*PacketHandler)(Connection *, brlapi_packetType_t, brlapi_packet_t * typedef struct { /* packet handlers */ PacketHandler getDriverName; + PacketHandler getModelIdentifier; PacketHandler getDisplaySize; PacketHandler enterTtyMode; PacketHandler setFocus; @@ -545,7 +546,7 @@ typedef struct { /* packet handlers */ PacketHandler ignoreKeyRanges; PacketHandler acceptKeyRanges; PacketHandler write; - PacketHandler enterRawMode; + PacketHandler enterRawMode; PacketHandler leaveRawMode; PacketHandler packet; PacketHandler suspendDriver; @@ -757,7 +758,7 @@ static inline Tty *newTty(Tty *father, int number) tty->next->prevnext = &tty->next; father->subttys = tty; return tty; - + outtty: free(tty); out: @@ -806,6 +807,11 @@ static int handleGetDriverName(Connection *c, brlapi_packetType_t type, brlapi_p return handleGetDriver(c, type, size, braille->definition.name); } +static int handleGetModelIdentifier(Connection *c, brlapi_packetType_t type, brlapi_packet_t *packet, size_t size) +{ + return handleGetDriver(c, type, size, disp->keyBindings); +} + static int handleGetDisplaySize(Connection *c, brlapi_packetType_t type, brlapi_packet_t *packet, size_t size) { CHECKERR(size==0,BRLAPI_ERROR_INVALID_PACKET,"packet should be empty"); @@ -893,7 +899,7 @@ static int handleEnterTtyMode(Connection *c, brlapi_packetType_t type, brlapi_pa unlockMutex(&apiConnectionsMutex); WERR(c->fd,BRLAPI_ERROR_NOMEM, "no memory for new tty"); freeBrailleWindow(&c->brailleWindow); - return 0; + return 0; } logMessage(LOG_CATEGORY(SERVER_EVENTS), "allocated tty %#010lx",(unsigned long)ntohl(*ptty)); } @@ -945,7 +951,7 @@ static int handleSetFocus(Connection *c, brlapi_packetType_t type, brlapi_packet static void doLeaveTty(Connection *c) { Tty *tty = c->tty; - logMessage(LOG_CATEGORY(SERVER_EVENTS), "fd %"PRIfd"releasing tty %#010x",c->fd,tty->number); + logMessage(LOG_CATEGORY(SERVER_EVENTS), "fd %"PRIfd" releasing tty %#010x",c->fd,tty->number); c->tty = NULL; lockMutex(&apiConnectionsMutex); __removeConnection(c); @@ -1106,6 +1112,7 @@ static int handleWrite(Connection *c, brlapi_packetType_t type, brlapi_packet_t if (coreCharset) unlockCharset(); lockMutex(&c->brailleWindowMutex); memcpy(c->brailleWindow.text+rbeg-1,textBuf,rsiz*sizeof(wchar_t)); + logMessage(LOG_CATEGORY(SERVER_EVENTS), "fd %"PRIfd" wrote %d characters %d bytes",c->fd,rsiz,textLen); } else #endif /* HAVE_ICONV_H */ { @@ -1115,6 +1122,7 @@ static int handleWrite(Connection *c, brlapi_packetType_t type, brlapi_packet_t /* assume latin1 */ c->brailleWindow.text[rbeg-1+i] = text[i]; } + logMessage(LOG_CATEGORY(SERVER_EVENTS), "fd %"PRIfd" wrote %d characters %d bytes",c->fd,rsiz,rsiz); } if (!andAttr) memset(c->brailleWindow.andAttr+rbeg-1,0xFF,rsiz); if (!orAttr) memset(c->brailleWindow.orAttr+rbeg-1,0x00,rsiz); @@ -1224,7 +1232,7 @@ static int handleResumeDriver(Connection *c, brlapi_packetType_t type, brlapi_pa } static PacketHandlers packetHandlers = { - handleGetDriverName, handleGetDisplaySize, + handleGetDriverName, handleGetModelIdentifier, handleGetDisplaySize, handleEnterTtyMode, handleSetFocus, handleLeaveTtyMode, handleKeyRanges, handleKeyRanges, handleWrite, handleEnterRawMode, handleLeaveRawMode, handlePacket, @@ -1404,15 +1412,16 @@ static int processRequest(Connection *c, PacketHandlers *handlers) } size = c->packet.header.size; type = c->packet.header.type; - + if (c->auth!=1) return handleUnauthorizedConnection(c, type, packet, size); if (size>BRLAPI_MAXPACKETSIZE) { logMessage(LOG_WARNING, "Discarding too large packet of type %s on fd %"PRIfd,brlapiserver_getPacketTypeName(type), c->fd); - return 0; + return 0; } switch (type) { case BRLAPI_PACKET_GETDRIVERNAME: p = handlers->getDriverName; break; + case BRLAPI_PACKET_GETMODELID: p = handlers->getModelIdentifier; break; case BRLAPI_PACKET_GETDISPLAYSIZE: p = handlers->getDisplaySize; break; case BRLAPI_PACKET_ENTERTTYMODE: p = handlers->enterTtyMode; break; case BRLAPI_PACKET_SETFOCUS: p = handlers->setFocus; break; @@ -1441,7 +1450,7 @@ static int processRequest(Connection *c, PacketHandlers *handlers) * There is one server thread which first launches binding threads and then * enters infinite loop trying to accept connections, read packets, etc. * - * Binding threads loop trying to establish some socket, waiting for + * Binding threads loop trying to establish some socket, waiting for * filesystems to be read/write or network to be configured. * * On windows, WSAEventSelect() is emulated by a standalone thread. @@ -1859,7 +1868,7 @@ static FileDescriptor createLocalSocket(struct socketInfo *info) tmppath[lpath+2+lport+1]=0; lockpath[lpath+2+lport]=0; - while ((lock = open(tmppath, O_WRONLY|O_CREAT|O_EXCL, + while ((lock = open(tmppath, O_WRONLY|O_CREAT|O_EXCL, (permissions & (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)))) == -1) { if (errno == EROFS) { approximateDelay(1000); @@ -2002,7 +2011,7 @@ static void closeSockets(void *arg) { int i; struct socketInfo *info; - + for (i=0;i=0) { - FD_SET(socketInfo[i].fd, &sockset); - - if (socketInfo[i].fd>fdmax) { - fdmax = socketInfo[i].fd; - } - } - } - lockMutex(&apiConnectionsMutex); addTtyFds(&sockset, &fdmax, ¬ty); addTtyFds(&sockset, &fdmax, &ttys); @@ -2357,6 +2356,16 @@ THREAD_FUNCTION(runServer) { struct timeval tv, *timeout; lockMutex(&serverSocketsMutex); + for (i=0;i=0) { + FD_SET(socketInfo[i].fd, &sockset); + + if (socketInfo[i].fd>fdmax) { + fdmax = socketInfo[i].fd; + } + } + } + if (unauthConnections || serverSocketsPending) { memset(&tv, 0, sizeof(tv)); tv.tv_sec = SERVER_SELECT_TIMEOUT; @@ -2476,7 +2485,9 @@ finished: /* to let the user read the screen in case theree is an error */ static int initializeAcceptedKeys(Connection *c, int how) { - if (how != BRL_KEYCODES) { + if (how == BRL_KEYCODES) { + if (c && addKeyrange(0, BRLAPI_KEY_MAX, &c->acceptedKeys) == -1) return -1; + } else { if (c) { typedef struct { int (*action) (brlapi_keyCode_t first, brlapi_keyCode_t last, KeyrangeList **list); @@ -3197,7 +3208,7 @@ int api_start(BrailleDisplay *brl, char **parameters) } return 1; - + noServerThread: asyncDiscardEvent(flushEvent); noFlushEvent: diff --git a/Programs/brldefs.h b/Programs/brldefs.h index a4a5cdd8..e2906a28 100644 --- a/Programs/brldefs.h +++ b/Programs/brldefs.h @@ -2,7 +2,7 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * diff --git a/Programs/brltest.c b/Programs/brltest.c index aef4b0b9..7157da9d 100644 --- a/Programs/brltest.c +++ b/Programs/brltest.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty-atb.c b/Programs/brltty-atb.c index c85ea185..9a1ed99e 100644 --- a/Programs/brltty-atb.c +++ b/Programs/brltty-atb.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty-ctb.c b/Programs/brltty-ctb.c index e804c34f..b7fc9124 100644 --- a/Programs/brltty-ctb.c +++ b/Programs/brltty-ctb.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -154,18 +154,22 @@ putCharacter (unsigned char character, void *data) { } static int -putMappedCharacter (unsigned char cell, void *data) { - fputc(convertDotsToCharacter(textTable, cell), outputStream); +putCellCharacter (wchar_t character, void *data) { + Utf8Buffer utf8; + size_t utfs = convertWcharToUtf8(character, utf8); + + fprintf(outputStream, "%.*s", (int)utfs, utf8); return checkOutputStream(data); } static int -putUnicodeBraille (unsigned char cell, void *data) { - Utf8Buffer utf8; - size_t utfs = convertWcharToUtf8(cell|UNICODE_BRAILLE_ROW, utf8); +putTextCell (unsigned char cell, void *data) { + return putCellCharacter(convertDotsToCharacter(textTable, cell), data); +} - fprintf(outputStream, "%.*s", (int)utfs, utf8); - return checkOutputStream(data); +static int +putBrailleCell (unsigned char cell, void *data) { + return putCellCharacter((UNICODE_BRAILLE_ROW | cell), data); } static int @@ -472,7 +476,7 @@ main (int argc, char *argv[]) { if (*opt_textTable) { char *textTablePath; - putCell = putMappedCharacter; + putCell = putTextCell; if ((textTablePath = makeTextTablePath(opt_tablesDirectory, opt_textTable))) { exitStatus = (textTable = compileTextTable(textTablePath))? PROG_EXIT_SUCCESS: PROG_EXIT_FATAL; @@ -481,7 +485,7 @@ main (int argc, char *argv[]) { exitStatus = PROG_EXIT_FATAL; } } else { - putCell = putUnicodeBraille; + putCell = putBrailleCell; exitStatus = PROG_EXIT_SUCCESS; } diff --git a/Programs/brltty-genkey b/Programs/brltty-genkey index 2401cbc7..cb68798e 100755 --- a/Programs/brltty-genkey +++ b/Programs/brltty-genkey @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/brltty-ktb b/Programs/brltty-ktb index a51fed583cbe0200eb4f29a37643610181393787..7c31cef62bcc3b45c3ffb6d2087cc18a2892a981 100755 GIT binary patch literal 1617196 zcma%E33!u5^M6|k6jTTZ$|a=b5RjuFw+LxzfpWFbatLUfHfbA3laQoP9T=%uN7f1N6Q9NQ^6P-;s0A z92h$Bk$JUWxiaa!srB%}XZSt0DjG|>t8b_`)VwxOY7*i+86je0byc+fp z8EvfX6#0em_`+LErf5rXz|<(>aI~c;DmAWKq_L=N6C?V2@QE--E;Nkm%SqQUMuf#M zFot%K7NbcZ5E&h1WLhH3hJpW)a*WbtiBL=+ux5Bi`Z45N-GpNyAErbvjc=g(~rc#s16q#r&jcV4#WF$lv zVZafKF>BGyqM@6PSuyYQxhL90n8i`$MrQ;MOB7n8QjF!EIQ-K#*2ru!E-~FWZ0?l& z#(^=0aZRnj9mdkgvPPE3dd5BG=ztMX)F}{XVCe{*L>RSGJ4VGqN0CNUy9iUX$r4$= zKV*us42_J+tb=|`fvy${Bu_NzTP7t&1fqA{IkVJ=TUO8b_J+W9<_PlxXK26+&E_&AB093;b&cZ31!}ErY_vAw0*#E} zhN-kp#8OzKd1sTz!G`&zQAVw@$Ot1bx~E~>7ZnvT+~`>^Dr%{@F$~vS-&mS%GsZ=t zH{-ob)8d}y9+^f*li6&FFt@doS{fKp3(buiHL@7BjEE+d*vPal=7>}%*N9kXSS*oI zH(=BOqgF*keM_X}t&Yu#62^2~7*!N$B$?JMHqwlt&uoi|hXNW~Vv0<~v4OaVQ81@2 z3lkH1mhV`TkQsgKNwQRGi-)Jyj*PY$bxZ+MR*y!OIzwtTwnX5|fW%VML}to!!@1@K$6_?avBhjRsMXcSc4<*2a7rog$4J40E$4X_i2w@lI(+qfwox z2+JX(&YNbKNxWf+j;hndoMuFu@xD=~&hVV2<_NPf%520G86BD##iqvB9gQkll(0JL zo-syolo>BHZ4yY`*)O_wsR8rb8=0C{FFGzNB08qc5OYx=Vn#$(zofSL!-8S=LePd{Kb z;BLTNzA*A&uICZ@?Cwvb%2I|Mu5fuYE9(X49^yTmh!n3o@PK>KnFlaz%78TfF6L} zfW82#v2Ftl0#F-_XFOmCAW3jT@f-$728;lV1dIVtOU0Awm`Q-CfD8b&EIjRi96%nx z0hkVO0o(vDKsP`BE(rNN6MxSF%m&;o_&Ipa11ylw2t>w0z+(A)FP=*QD*!72s{uuT zwSaYi^?(Nf8vqXj9sz6u=(ZVu7XuyzJO(N@HF6Az;l3IfZYIUFX6cduov(u zU_amhfZCgQz6Cf8co%R4a1`(X;27Xzz;VDyz-ho4z*)d2fO5cBfb)QhfFA)r0WJfm z{fg(GfWHA(30DjM15m4tXB|LYKs~@UfChkufJT7EfF^+EfR=!p0MuH`(~M^fpe>*s zpgo`ifZEM?c9y^Ca~J&G70?|J2j~f))(6jifB}F(01F@ikOUY8NCr?FjprD^I6yjJ z0$>v04!{&ZCcp}ymW8JcV3*H%c;?IBE!0AK^)VZdg<767$kc|MBgHo$hklY)Cjo<#S&{9S_Qi-6sLJ%W1$ z&sPDj14;o000#kY0p12222eX9PyU3uqS|M|mxbUylD|L3^LPmUB>p}npHIv4ES{eL zJ_VEmz6P8Fd;_=uxCqegd;I+)paSp{;1>Y3U-7&G_!ICK;2(g2`iC0IPNNo}4gh7X zQ4dfba1DUkwRkoFm;j9dHvp*Jh-XVcD?n>N3?LRjt-U;N#-uU$E z-k0u-F7)O!=$1L=&9@U;E&prR4Wpiad{6UEZT#&%+4}xV=bHbVxGZW(gTJ0>?oH^Q zx$K^S^*yhS4y5fpc;w64|32IB(Sr~B+xmB;fAGMcEi%vf0=s(8JZ2gH-uIpFb$V_* zzo^l|t@BcT`la8(mN%sSxNFPM8-0y7B(I&kWzdk0_Y8F=TlG_e zN$m$-7=Qk!@BXZ}X#2$8OV_`%VDKOJe12=;v@NA;?%T1d^}0`DT2AOUC+5EN<3pb) z+q(SR!-Jc*7`418zW2aCerTJJ{O@-y5_`P#boGsLs9=Gmm(zC2no3@*~r*DiN^>VWyY7hf81gG zORIN9wK(%tO8M!C*sGIU4;(yT+WXf&8QXiw@6C?X`Q-P~TTYbZG~c)F(CrW1IyUVG zPx_taSNr_9dFKPJAIAUlO?1EXiwj$hTfOh{!UiL3rzaK+erDvO!`dFW5_zupx|gC- zb8m0I?}wS&PmCY!_SsC^uStnr#yvFXttQW3i0E<0jh4(d_g*Tz%d_#X+kdHj zD&zQ>d(GXO4tv%0)}3z-xy7FM^^7j>9DOupj`jPQpZ#Kfb=S1y(>=4!{*Yl=zw)Nj ziT9uUU)nPx8hr89s5jbl-7?jbQa5cz!>^Y&Ilc0^*hGtI<&K+|J~r*pQrFTYH~6Nu zspDNTY-e=8&uU$LB{Om0cT;lzzOre3MCXx*ua26O_D09DYmfZe{YuoB8`gX~?!wlW zU-WqG-dooEF=e0IxR})X%+erWmXpc@-@?^zgGyTgP!cXqjb#8cbHKXSfoYx_0# z^o~FH`jk`K7EXNTNbi*o-cH?saXGFSlGM7-X(r@7*aAkKOXo*i$W^h%71f+B)SvF}_~Q3-3Sl)Z1et zqvx*ve$Rq|b6X_LeWh@fJL}d3aqq8LZ(P%0?u2VUse9A!){D*+U;Z_qQGU_e|J0i1 zJy6{9=xdX0nP-o+`tbhw{f2EcpZfLn{Fml_yyW=C=)W6oZc(=U^RG9*w7+@IuA#Tw zVfoei%%W-LeGmO{Tc`5_e;#so=YFoc6OxX9zwX&?(<0ZJK5G}Vd*H#1zka&XQ}^k` zz1JkpYH9s<+lWg?mJPUhO+A-&Lfgl_ym8I$2g-ME9{pmBXZY}iWfM!R&&+Ta++v>4 zecs1O+oz4S6@Is(Y5o@n=imL}piQqwe0O%)SLT!R_Wr)tdwxRmt+6ZjY${E;v!pCx z?e~r!HqQAuFl}*q+5Bs=&ei{ELgT4_zHvwTf!!Z}_f&&-f4%?DPCw7syL;O9-_I!V6)!Cz8ZMk>KlFv7{P8`y{`yKDtQYO9Jc*CBqEkE?cKiY9(eBE0n zFI^o!GiBx@kJ_KS`;Q?DH>^MYRr?n%uDtx}&-eG8*Jj15&JQQd+(=Rpcn0=zp&ee&>lWk2KeYti^gT1#cytBjWon!lSEVwctY53`Pww`|J=6~CF zEFAcF(*Xkq7VIjx^P{cHQy(4~ITg>xE?!E$&YJz|aN9re?hTJEKGC=32M2##pEB*z zUu_%R_Vu6le!uKYkBejGe)H;Mh5ODei1}i7%Bkl+`{<^Q-ltC0d1X_lwzrRb^P#hk zAN$p0>o@=L*_(^YXTGy=WBsz*e_s^$a<*x1 zzWdka&zBvr9KSv3&RMZ7-?{0+`epM6HQ&-JwMW6bW3RpKmU_FFt#&z{h>J>E;c7`SEe_sI*!AA0_5kLDw%J$P^3_^X+B zwMf3)^7Psv=aV-Uw;A>2{^9l`*Bm*}wZYi8?z}&-)(gMc2cGKie6;WBA5WjUyTysm zvO8bydbWR?OGmCd8CbSu%%szovyZP?GUk!Mrnj3PePR1gS?;qx&uN+8`Y!Y3HisVA zoZoQ!jAH-hiDlEi@%+{Di6x6oUvzlOdgif)slQ#Heq`(IlUmN{(&mY$?`!Y6t8T54 zpU>G5l|A4UYwJBJ-+X3y*S6%5n~k%>Kg};1G5_8>=9J$0TcaPgmUVn`_M@w|jSsx{ zLjPB~)?W~lbpMxWTSh-Ubixzq*QX`yZPw(@{PHh9h}dhLu_D-VCPzPw(i8NaOV^LV2f`?7nP zMl(XogDPKf<{dKE>5Bh$8_r*RZjtt-XP}YpL1%p@QMP9Ky_so*~ZyNNO*>`07 zJ74c)Ix%x=?fBk(KY8loY3^ltEdI`CQZZXd8_%QXIxm|l@Zn%C%QOozg z*uH8;x7G`$6uz|dp$hMN$1KHH^5=Z>d~&achn_#wH8REBum7fd@BaI8V`F=x_e=M; z%xZb^jf`HGZtC?|pZHhGFTB)p^?M%|9=CkHc;CX>zw|0O{KAtz-MVi1XOYeNj(z*L zR)5{tx_#9Ct1VBNI)2gU)`z$6jr!^I%Qwy_Dru9l_R8WM%cE=a&#j()-Iecd8^7hz zgZ;e2Yqxy-y_DDbY~FIX^Haypy!u)8g5Hh@tGUIZzs(=jHGX}h*z7*~MX$QUn}0gz zk=tf1>T>s*%%el@i<>aH?kf)-IlTAy&54Vjym8`%0qv$`Hb39u*ys0dJbq?Tr=IH; zHjgh3^c(qHyLWv#quP&q|G-J_@z?(>ICEm#$%b18{qfZIYhHTG*Z25}uhWifTL0mB z-vj&Byw*7Fo&CcXz4qOpq5Ic7QTyun=&|c&U9_y)vnS>3z}Wp`^Xjj?nzCo>vcKn^ zN;?_7d`i7~g|B`8;Md*P9eSqp*^ytB4%oH+=KeptnDd$AiFdy-z1*zM3m=U8;p5-? z%|EvG+`3Dj3`!jLeti6nxUwrpUszF;5NX~&s@K?z^E=PKw>Yq9&a~*1@86hn^~ZS^ zQsdHk6eRkZoyonDIqvTUy+3?y)IU2@51ktP>;7$L`{W%f+y9$CqHsgU$Dg(|O+GU6 zwTHJ4E?)ZOyhW3*{qoJ?hFg%*Z#8posT+f8PIlpuUqU#jg*d4ZjBr_bl$~t8|FUt+2}_< zI{evz!=~+~)6WimziIi*L3Kv_ZF=zL4(8Lf@7w>{?zdmPp=|o^KVIpxcy7~@gm+)< zx%sQVKkq;B1Lx1J7yUJGXpeS>Gls>_yXiz}+Q5wa0)H&~V$$?=({6wFP2X+Ji(7t5^T@vGLz8~XynO25wIhm0uPAzXbK|#ud+fk~gR|04LUNGk^A;7 zJa==$wDaOT+;^XiYBdULbPvkU)-`n{9s$v)9t4-b3gvlrJL z@ctBkcHW1XTc&OAvu^p>u@Nsnj_0Fs*S=OSxx}bKdvM;9ivrb%|w%R;4dtd74dL#FIGi>L)>@x?_UmUP)#os+n&zRI|w())bL(wNL zk35qx@8U;4Hi#VE@sAC?UYPdSyjus(zmn6d`1*U+|5~`?s;B=E=YnTn{BYXZ^Oj@# zmbE%@-GjBR9-p?U|J2@Tc?+H$v_59!i8*_ZJsn$r|E2x)KAp2+S z7kB^XyOQmLFEli6EPr6Y&rf}{(R0jmVE-T87oB;MS8MP%!qi0HEQ~ydu%4`m-hnaIgzpuGPkx=6>CfUgu_iwC!_Yq$ zW?cV-8P}vR^iAv6-0y-gjHhF8u&+r;qyV5ek;P*&xtU69z>rt>8&g5 zA*Kd-z6#@CAB3^bx5D&W9!3u_Vfb7PL*FtC{oi5qlN`oQo(jWfQRMM+J(`>)-d$vfUjv>v`<@;9=e3#zb*{_hGFQhgz>KxVfc&<WUdb4&jr@Ic&MQUBsTQA5U;WhE%gX~D<#WqjZy<68^tNPGLOMrP_l77+?Gf_xrZsdkde6*BGz)d@l5!gUpBS z{Zsq97xOW0XZ;uvj4u*B2i#15JEM(jn=*aHgUo-M;J?5RMAUdsGyZPDujoo~vZ0Z= zhWVQX9|3t98BLAM!FGk|C-|PYxK4bE)0q#tQ|-${##_cRAG$|Otqga#Rlj#Jy|$Bi z_?e8tA7i}s*^8pjvh|F=kJ%V+4rcoD=FGoX@X=xq#lnZB#a-AKk*AdPqvgMPGvfm{ zGrm^@Gdd=EE}6l2E$5hPn7(Wq%R_f_sjcoV{Kv68wFRGu*J)fueVAU)qZNM;zQV=) zwVk)eA4(59nf?yp6QTWUFXMY~w}wgVq--GfdyC+kbYMOu4>SJ}g8y(JA5nr<41&3H}#2rjkE{`Mf6hjZuWZ#)!UT5ez?`YtHoM z*O?yMHL8u%`u~*iwC_Xh@lH%{$zwd#ozwytIQ3gTneqHD?#jZU2wyy!G5?ET`Z9bZ zyyXJp_3x$J4TO)6^@cF3T1x~dqL2HS>1PQ30)|icObQ@q=LJ7e<~Q{W<1u{I?r0(W z=QIDi1iwrCuKZEfr}pa~%uHY5W{j~Bp}=!?XE5yn;9W?{U^&i(4~ zz6dyF(ZWjI1&NjjbY4R>&nZkZ9?SUJg71Zo#NV@>@!FnuNWZ3c zSe}_epEQW+%?+#a`3-@B=F8&Z`3k@esQnSk^rjD(&jLmpg=WT=O8s+v1b=Z>?8IZ? z@fHgG7l^~eztqnB@w#dU`Z6EOYUaO4@Ht|iMK3ZQ;ZC(8@guXubBL$f%Vy?NHj2lE zvQV{aB>tN=GM@j%J#w+Dl9tRLW~|yaOdRPmb2?L^+*0is(SP}Fria+7-6nDda(KMj zFCvgQ)VzGpd?1EuA0#opcoXv}6TC^rWm?PhqXhq>h3SjBFujfsu~PSzjb{9FLjPzi z>$$vIoQ#GekUZwW%pc)SwP!Hzgg3+vn+g7mnenM#GyMv|FX$uq`i$3lE*8HllldAb z^v_AZ#SWHJ_d7`9cIph)+u%rk;mNklzw9pNze@P*G&A1PkNFIW;4dyp{psn!eDJzz zmnF_r$hfu(KBp`5F_kf&%Yt7Cddhcg@S9O;m~Pbu;((v@V{x!NIxkPViScpO)=e=n zj5h+z|6k#gj6h9%Dx`kU`D>ewpQo5UP3TQxSE*lezqJIv1s{n|;10(3jNmW+!tj-x zl3!rPsy!$1B=9oxe^2mf_(=4{FEGBn;7`RcUjLq7(8gThW0p8vSH5^!>YwslmS?Qs zO;R_S;(1;)eM7OgaEGrm<$_P987+i{EvMe#&Ps2HmMP zT>RQt!FbKTfyC!b3**`9@H?6q8LyY|_Y0p7#E$~=SRRO>TAA2$#p{e8D)>0DPvaZL zTLhmX^HnPAcbniXaU3@c2kWyug1^|@gXJl&R#*Qk`l%>l{yHB14--LlWtz+KXA1u= z?S#*G#{VYxdt)VDrE$Mz!B2-H6Q9&gOt0hfd!Q%0(U_-4YVIEwj13jP!VKG6r>W%?O{Z;yaR_>v-~&xqhJHc7rK>dp8aLjRTMp-l3c z&Lbl%BF_@0&lmbQna8;4+%L>nwcVosigLzJ5_~VP*N} z3H=#NDAAV-Ui1G_;%%Jl1GE?Vj(T3cWjP#=|UCTY>qdd{MrU`5O_89}7ny`oJ{CzajM7 zrOxz7d_Z_tEf;KwzC!ADt^Z3BH%y1P-wi^4Ui>#s>TMn8f0p=WoMipi7W&fLnSW}v zdiWg+LmIpm3=TBuSRP= z65kLWRU6S?^j6C9=Ly~=dMlE3CCF6!G?wWtQuo5lRGTaDHcsk%oo7E0dnlH=0v}ad zC-p|0)TLT)cZxlf$+|Uie=s?awSKE^qg6Jo1&RqUif>R5=U zT1)YZBJsP`f=|G_kUXX>%zv!l_qSnuXiW-{)6~Qd^{qLw!=>> zjIW4g{zwO^`NZBbC12MOykFvNocKit!G8<-Mn(%`=PI_JD8bKz7}RfRN9LbYi@$hQ z_*U+l`rWj>DxzMa&KCOOC1 zD0tdNApT`ipQj1FjmViQ``+^fUm)}Dak2iFh@Kx5{+Y7w7$@|viNBbt)f?Sz;eJ!a z-?g_U2)@YAded>NT=*Cg|8@L)bD-#1`qlRKR*dLv2CGhjdwSk!K}Y)!fp$Ei3Zb7U@yhs^$CW2~tI&QY8E-P)d*)6#E|!~wI=-zfWIMICrviUr?C?6c@B%c=335lE@u;%fDOf#mlhIsfV{eCBDp zoyz>R9uC1UXuJW*FIxZaBao7wOJC)FwcWaqM<`$SuD0I44e}6uoWy5sS6{;(h<}Ob zQ}Z9tn(0#|F4Yn_7fZioa_;t=;15Y$HOuGtI z;eIn^zdc{m_hP*96x;I?g5Lvm(YR8@@3fu#A@TUXJa=xJT{JOGd1cMybL#fdJ zEODSr^7R{n4@f+To6r4@5d2_SN5rM@xY`PS6YQV*EuX;j-wNI)_E2^W3E6v1D#6+fzweZn0= zZ*M2^$UYCuMzyyPf7CjqnDwmJDZ3=TnKpC3I==O{2>sTo^sB*8%}X@X*B5yTk+{i! zGvj$)w0*uKanf@)%MW)}Z816`c{*3~yEUSR64__d^Ri0pq*(UnwcXYgKPsvgZ_8!g z%TKeMTA!X6(SH*j7yUP?sI9XwK2!EHt%84~zTgitpPh;t|J@=uCh5VlfXAi%rMc+e zkbUEHp)VFWjcLs1vfy_~oHV_~e6AP#JPe%pr+&fsz9P@-;zwrM@JEXg`pc3Z%Vi!l zJ`#bQ_>>%HdWfgmBy>dhvZomTu;61cL5hAG<8>YQlGL{r56h$N#K1?QH!WcLs}ano zbtB;;`!FbbR6CD+q4JBIGs1mTi@J^JORJr;7_ckiUoQKidm@>>vDm-mA?|mm@Y&s- z_%}D|Rm)T9IxkDz1#?numyWk`?zUL)&%->3PhPb=asY)N$>WiA<-J0mm&kaN#H*Qt zKZk%x^u^gMXNusRqUUm%$EO8v?IwJrZbukbtw`chNjB?W*FUcyA(9^zEn<7t^VL}V zCGa%&tMkGJ@e8x8M?{^*{SrTmmoon%>G!0_QzYl(wFN%~20-Jgkn?Cgt^rbKdiry} zV}yRJ=()7o`te`!i=qUk*M77|?7vLTYqEt;p4dat^DJkU;G4_*rY>Z>TkvzPWjQ_7 z>XUQmm-P1LGS*v!(ElKMD-}NV1aH-GO!f`Df}fhi{Nq-#{2K+2|3;+JPn_(p!aY@s z6n&P9{!;~ijrggj+PWr9?9C#2)B1nU%=}YjUEfOh1jLU_Cs+@;GO+h=X8ID@uhagr zUgRlGWcjr}u9v#5-bcpOP{otxM*V93{(#s?#d?;ryYQ#~95LB#K+c1p7S*!b z%Y4cCnvUBasByJ0o~gEedvSE@?-Vcv~2yq925P)n3=}T=vr-hHCZ1j{-+n9$h#7 zF7dPIAamB^!he5P*+cmwY=^pTxh(P1GK}e`3IAus?}`^Q|GPx~@uE*lKgLH1{c|#p z7MVwc5!E6^pBAY%CJX*Mp)a|KS0az#Ka;#1M+b;#m?qW6 z=(sKW6gf{zw|ENjX3@Noox@wUWOL)KHXgg!?2o2$j2?<7B(WZz!f+X)0l ziYG=o+e4i2*)QvYqD`#-B*7QJU?_f`qJu@WXu&79U_BJe{;>Ab5Bf5`T>Nf<(BCa_ zz)TxuXk!I`S?2{ge>^JqQf=o_&)hHgf>`EnsaDtR7yh0y=3iUrFUh=k&aFWypjiTog*>BYOx(JC(+1pU&b6n`-B<@w5V?GUp|M@mdANK^~twMi6=F2$E zcpX2F2_I7`^kDoAwU~aZ)MJ(c#$)`;KEby|93Xo*+L7%cLhyGWZY%wCWV^jJlE2s_@y+}g^ItCX zH@9YbO9A6=5d5L;jIWrOVoEWBRzraBVZ;|yN%vH4u2)u+h$vG^#A**`SRp5A6+LDi=PHsFrUYT{%`FU za=xJLt+kGa)y`ETVz}SZT;`K5^33YY_|)|*55!RIN71t(`9<@;EO91I&H*O~{ZA5a zGbL^#9jNw{=%@TL^M70LS0%q#q+cCB$qdL&EMkY5LO)mhD{~#|N9T)D#3h=?Ks3jb zD?;B}?6WM9$J<2=aXcKH^l#eDe6;@CN*sujb%aIu6o~z&%6UX{!M~3@OZ_gAycQ++ zT!~}FCz=0Q!M`hZRkDWhI)2U<`!AQeLfdVM=(9-j?`+}orPjaHjoQDqNIW#lK3g53 z{}>(7cuPjG9&|ox4LvJ8NPVU8{}Xyc>Ju&JpRJhQBIgb%!arH;IaAJebbj9;`Y-9j z^RDe@r_@EBEY^dL!?gS)c`{}HaFHG_42kwVEV7=`^{34&<9e3)d>+9seBYJv0jU$T zzpT8K@x|}4JcEUQK*m)h=QUcN4dDnhza_Gdq3x}U*iV_P$F<$kbqliFfSgkl3;!9S z&rCT7IUUJg6n1BMN~QkM^FBx7nBiqPR|ua~GQTB~e^UjYjR2+Q(ZclnFZKf^J_PnM z2GgY44_!nLGTtP?-zf89k$k7^`8$!{LO%pR8xX-ST-9+>@}Rai8ytk>DHT73o2WKh z{HsXrlZ+L766Tla%S8{n1iw`9rei$6D63REA$-c^e#l0__ixL5JhE@5?eK`iLy!0o z+)cG!$amCl@dnn- zPF4Fz*NyKoJx6c+ZcEooV|lzf9~~3<%jLeAmVYwjCq29+`(|37C2%O3UtPt|H!7#}y2 z<7*Y%IY zJ&32;ACRB=Et7Lh9mn36y73Lk3!(-iPy8bD0oH@=ce&^@vzi^QmT{#@{?+#O6A~Qt z8<)uXv5P!MC0=D-V7xvL+9Cd8NF4~ZsFnlAAwK39*25^#TVsev_|m4#Cs*i8ML&kj z;}XHQj%E7HZA`EIE=A-l>BRUb;a_Vo)0?C|(f+tW^c;}=z}mvUj^wX0*?&7K_zut; z<=7ZCbK#V-PGmftG)nMjnxr)W6i z?-u+J=#%1%f&WV`YI^?bEx$$SFxJ1>x_wh9hK{7X(T|6ziEO7vDF z`Bca4WQa}l0U58BXFME@@Nsil9&P7`#4kLu&#dF&Ua_}wsY_w@s$FW!e9FX5>I(jM z?WYY`&N9Jo0YmDyh%N@8-7NSB8Lvh5kzi)3Ef6^?B>r!UV0=?;Z$hvA;syupOWgO2A0YU-B2Ss@(`x@((SqZE zF|=wN7#PF-7EfnBV};K*B7fWko|iuapDgp0DZhs@3;uWM*YY;gzZ1buQlA)R#x#y#{Ci^mMYI8hR*%s}+o2+-tec<~)kYw$s`dWuJns(){=@5- zzC!kM?h^b9(yvMKBgj-6)L8gSywd*rPg~|+UhV!;k5)|YInH|1ab|-dnCDDuefzRQLFdL(q3cTcsr{inp$faF>2 z?-?53jrk*us%95IDqYCybANTFNx!8t7>_ik+H#rS^7nXL+RhWY zGoQFm7(Y+?t%rG`dCdIFqTW9$hH|6kKY-~AWdH}YKc=ys#|j@S3LD~M+RyU9yj7#& z5Wf5&#$%YOEtGyu61R0-`nlM1>SpeDiO@eM`J#k=2!r;xB=VcYU&_Qzt`YrMbzV#4 zep`r~O(dS1<(`S2_Z@Hqx<_G%eNL5r(08z_$_CZ4wS7Lp_>qEttRMGV+Klyy=~Hczv@co_MeD zFOhtjn#Ouah~O_?m$;f)z~g;O=o4h#1F|mD{=QYlRVwE%(}g|*hC%Va`tQ!1!ap#I z`^87q2E(D09%8v)ZJz@=Gd@n@%mktD-+=H9jJdMUENG*T$XS%de9ZDid$>CBPnEho zPw;&)&xALRWj{g~SM3qO2ez}EFf-MbO8sWeWPGgP?GiW2BwwIA)vikYlPdomlF5R9 zy${)23uAA!-!+UxfFgNHo?`hOLSIMb%aHvyt+z#@pHzv@m=4v-#4l1GVLo=jr%S#| zmHn&pf^R2voyW)H((^b8@ssKtbG7rS>p@0xmPwubg7E1n^IN)?`ScL{t5B5Ev-GR& ze30-7>|r@2%p2_`ZpX>`;yK|nM(m_m*87sa3@_|W@!!Jz>Ui620Lvd&P5wKiU(a;z zH%0hQZOeQt$C!_{^8~5uOmeSsiO{#v^fxfQOAP1?%!%Z&^kF>zi0G9%n*Pdf2Y`)#+v*y|}9Oy8^WiRwI+V1tby%`Rd zLq1m_%eDJ6vaCKwHq#Pwph92F@!~%*qxcIWUxrUpRAE)wLx^}jyUUg_%i+(<@Y+4j z*%?-R%yPQ3r!z~!B&*{QF+_Ur<$ z&rUPr$Sx?zritm*-zcB~CcFHpUbn~Y_0OJQbr#q&)EC)#R_{=+JAaHdKLiu}U>YEf-;pz0k@)Q1nT~8b&{l7DUWV20 z_hwjqvt8M$H&T|@UEsGX+JXXyEyM37$^34Gal%eBtRBc@3sUsx*)Jp8Yq!cv#6sCX z87V)bFwyUPT%Z&e6reXUOY%KcyL!B&-LUp zJ^uFk>CYYpUd*0O8t^;v?eYmSs81mC`12sQjcDTx`9Rbznpu}8i1N--eEiZ{W964x2Qmrz z<1{w}fnYGT&~6}oB~Q0^x{<@u|P^B*)!gA(F-|#Z-EQ5YB$^-zk{63?}fX1!70~XXwNo04n(sIWCyRU zz=J>FqPb*BhAo>6oWeSZL_#RGU#&;DqcD#0FzP2rC!4woO!?WTdj{%tm53>6?m8abWvGCrrnrKSm=!OoRykP*%FkZxdREKNp6Vg7U%<|iW~r;v=^AXjp^ zsqgGr(EltiGNu9Zu-XgLAe`#S7nMWRg2|t*>_~NJs`R)SPq4FO{iBaUcXWEUR_!-DUS#GCK84|gg&7Du7 z+Nv@esa?$m#)v7xQ1Qu4^Qi(NIzTjYT&bnc&eVi|nOcuCwuyD!`8fI)ke zgQyXx_u?re4{^I}4wah-0!zbM*V4zN?eVpCrF7U$sKsAIM76qQ&n?n|v z<)0heMnn*&a3?&26Uj%Fb|AnoyFVzH3@=Qul=l%6Om6u8fH7|ke$%bu7vj%6I} z#wx?@B}OcW?qoPcmK;Q9nm$Yi_1g3r3dLndtT>kawY@Q7Z8(R{`@;?p)9%&4g^ep-yYA zF%!!L8+1<}@XajL`8s4|`wB9k6$flXb(ZYPb{5#|q97mU(O2NLry~$4RU{Q6Rrpx{ zepVU#neJjpo*PDK1eYKr6H`DiR)KbSgDh_plnt}-*v0e^q!NOm9CZr2z4mDXUk|}R za@}4`fj!4jm;pyrOIljo!P#iyD}{9UQr$jBA*;u*7Qm4)ewGKTyP$chz+qtR;dK`} z;6n%rPUIVCmgKjkq996ipe}}G&8}i+O3C!Kp%O5?spq`P=+rcT9Vv2@-Ia^H%mzFW z21o`xBt4C~qqntjvO6m)X8%?botuQLHk+cZI3-rL9MDvhLoLGvHY*M>QrR;P8LLZI zuAOHA0ffS>ngmiM#|0nhFO|xMpgq8W35m3;f)?IOwIX%E7`;A@L=?;7ZB|N6Z2BR- zkdcStO$AdL=}?4NOkuhdpte*@HHsb?I17eUhe~0V({9VPOKcqtFTl2fk?U})kj$R# zhwlf)4UIQxh-)@tI^LhtPqYosMf9LTUA@dxMoZI>fDw-cpI;B0W`ejIz5*n0mu(0u zlAY0-J);2jK;Of*rjr`tofy6gYo(cXR)QLIB3HJs3!Wq5s-h6ZQnK5iGr;(qvt_)9 z+c4(YDP9L$n3rGH9Iy|`wdfJk;IpUxClDd-t8XNKRxwu=f{en0Iux#ufPko?68H^+ zgQ_W321pqX6)`9=$e{l-x5`naV>uZdQBZnr(LRl&ooRUa{a1 z6M{iu)W|WMUsNIrwWLvSC$0o+HX5pMz&jyharhFwn02p&PAn9Z77?da&`m(tF|d-b z+X|2nJvP_^S4vX1a9|hRktHP}f!oAO5r1b;ij={zw@R{BF{Lu4vx}?j65`Knny7!! zt7x%gC1B;j-u71s_DoT$Jl4FvXw`PifI#P zxZ6M7K3f^je{(5yg|$9rDA<$OaAs#a&yQN=m^4IN zD(#e<;EtLZ)jbtT;>!}^RHZ@jf`g2$GA>A2AhsUwqb`Eh4jrlfxdK#9K|KU33`8$% zpSc{_NlvTBN5LO?s9Mepb}hQX_%INxU@)t8+fZz-A;Y6Ap@m3L#q1dgv*E0$?zyIf zX2^^vJ*ZN{jkpNuRFo`0Vo}+Pbgt%CCkzf#DDtro$8g|maGwx=t16BfxvIAHwA^9$ zjd9bPc#TJ(?HDpU?O0%{5KIPH;B>0(YqbJJoC!6d5R*{irMpo-`3zJ6q*YamA@*SW z@de28%vfbvHZ63HfnW@(SndvP*bQvtnzxSdOXMzYSoigEqP=NO;1eDNJ~y3-vd_?DPAw@V5nTi!GL(l z$9jgIRKUbQb)iRbPF1-4eW@~c<{A~o>UXi z4!ep9*dvy)ARuMiQNi%?MU{01_6dR<)q;tl9t5N{iFl1D5*S#Hsv^bTLrWm5KdFaG z`lD&Vm8#ZqGVv6BB`IU87da}}AxS@k_jc8AF$>7(O6hPoil1DXqhA&IE8`h0HdG0R zR}hhM9J%msnLP|ZEecf>#N_dkRV5A0$iP+y?Q;c-8%aU<-pIlskqhCP_6|tEc&9T3 zL-0Cm!TQ(%LqadXRSi32HV4S6%PJbY1M@>R1+{9oR%7If*K0?utF-1*gOv0MdW?d~ zCvsLP(2(&}s^rqcIO|;9fvtK=_OXrV z3ZL{Cx)V!0E)qlsL#)_+5Us#WhE?$<_-JM6 zqQ;?;W73QQE4B-`Fr!*Ttvf2U8Qfdoso>28m4lIH;HbQq3-w5kucr!R4jZPbnlC5k zU~Iur!N?`W<0Q}RRXGE(iJS=0*>0l@iON8tHbz7>h(h9Tcpp_8K|fP6Q2-(lt8DqC zV~=AD68mWEB7mWqb=Di4o+?j{NC-FNddjP#EK@PfQliB&ScJO$eSz5uRPd3Z*K4Z_KuJFAULd!;$@MijsFT2RR}j~uXr>l|!M zA2S4JR0OerQEm5A+YW%r|JGrRthuoE>WhEQFL2LJE4l-BdNt=i`O| zc5GpKY1K0j%I!(zDn^pnHJ)3l^Rt8np=)5a})J=7nT9B%I#0wj$ zK771Pr(HA}^K^$tHbB&JDr7g-jdL)2p$AqJWM!a~qAlg%R*>3SAU;+7lRdGr!l+5P z33lgnI$Wnhnf9J5%>?S?k%lZLgku4S-5y@$P!f<#S0#yyx+|kNS%`RRNR*>}WnUir zl`~Xu%R1ei?6TQ$T+jXu0=7E{n(m!VMqTM;l_|4wUHM-e8O(UxH^S)<{IGIYQB8d? ze$NVS_H%GlhEKayZ2Z`Xr;{Yv@u`e`D#8Z66Vj?WUyVtZ*=a~YQfc#c9pq7~8nP;t z@^EN+&s%#YjFyEh?GnoDk$$kgL+FBOlfJxeoC4ttN6miFW_Yu^vUC73 zh6`Jy;~C|L+WypBsVT>j#F5W)u1_5>UeNJusSc>n<3bXrZoCD7@nEL(suV?^ED*;Q76~cwc6WpkpK906$apsy8+}OnUL9EmxKH>{KQo~_%Qk>z#s;+W@ zpw249I@BUp$s8g9+d@^xgzCrBx(AmWk=Nu@OD)c&TlSLB<5*pr%O+Uma#*S)DwDHN z1EFwd2j#))=$MG3NrVG-R*cCP^a?ebFogf84$4rrC*?F{_0SAQVzQ|^kUWV~-F5_!Xy8K4Kw^hy$ zYf^P8(ueMtVT@|~MxD#D#xPu$7#O~-w0o`;vv~_aOoT2`pd?Dd9V&5Lifj-(bkk3& zN#&o_j*{4@<6Umo?0k2DPZbTprBUTN5{{IT?Z;6)U1ZQjAp(J#=ybP%eQL2AP{wCv z!G|220kRRhbLrT^72LlfjaJ46bn8-^ENQb5Z1ZJ>M1h)Pa?oYywaR=vk@l9Qa$ypz z@`mE>iNr`H2V0}^YG{(&T$_@CV0*4_Hk=Os&np10C$!WYz zua60_r>hfBl}jZ-bt$Wd1XA1ZDqg&qHz@SR3frOTg|}GYEAezvr__T=9UF0a;}r9N zh)mnuT*b5u-clA_UDy1++_MNqZ^RCD zP!dw|B;kIR4pu`DF6i=++%M323mH?;{Gf~RIBCGy6a^>NJi@7pL@-e?VE8|Iq4=>B zhQUn>_$V%L$%0OIR%MdVi`tsiF-64>>LY0LWXs}ITpy{Sap;wjGC60Ao5HMEz1rpv znwFYCv7oAm!YLD6-8mBHxOOL&FgUM6g@)=JJ3Xo%Q&bpo=ydAA(5g)xM4(>4 zil%BPOqebE$Glac4j>dWTJNRd41>Hzo#*jB0+zFCAAv3}!s1lH5?r=ZI*+MRYMM*7Jyxf?R z(A}qOK3SwPiVqg~%uf!~C`n+a5&{Hgh4KIjPQ=!bH7=P?FzYBONnycvwC=GDjWOv> z3*MUJB?WqrvP$_4NBvZFr$~0$#2J#^K~JE#h&mLy{qMHEvS(V@IdHRvmT!=EBCaQ6 zbrqD8h7}Be37ou?!>X+W^%o`$AzGc9ppTG}C3KUrkV+nzm8uJBzdJVCm5RfwI>98V`(rja<5v4X!D*MYu3``Dj1M@1 zg)R7^{HKV+m9)dB?HxOEAqE$mBGMyjIG7qr4xK|tC8S8&oYQ$Uq#{Xo_%Q*rsKz3j zZsOANYZyjEfsl)$(Fn1HoE6osu|Ch_D}4NhIIjfDV1B~(43?odZ`NgX$f8;tOOEW- z#unt)MqYV&Ob0HdYz|ydOy$`j9YBy9hTQw1yp=&~03;9mtV5j^1hphGVh$0EJun6a8lg(<;ka?AiXweO0@C;p^(spjq-3>f4xVPpwz8O`@Isf+w4QG@ zG>Ya3K*XNzIg$y69G(5Q1PxjsFLqE-(Z+6N*}|1xsC9?jFiCRFba>q^bsnpJM|;88!?AGDW5;YI;Kw;3Q=zAd8K?oFV#5YC3>_AhCO5TmDsS(l zS{*1mD96CI)fN=3DW#m@!QqlSs!Et_=;^A`cyND*4-l)kUs}j1mfoM?4Q_}%+?^k? zNzc}*S2+k3yn!ITHyV)xyA7Ba)u+siEVubp5m(fPtVKSnMo+&IpokG-PhO-46+baf zwR*!crE(?4!JhQNVV);{g2U^_Jf!0X2@YK0r%VccDD^-}wY5p|@h%iegII?HIkt4H zf>2dTanF|EWp7ptxJPy90-j1Tu;;UdG!+f>)&gRRT9SqC=u};d(B_{TcYrZ86}vfz zC}G(G=$lF}WA-8TqwE`2!f{ydVqwBK$dhm(nuL$wf|MFWu(GEsd33&j3&ijOx%@&Z z=b|g*ZJs)mx*->!YRpky_bdsEkPO07U7YRq%+>~r8}4e~m7SW>5^tNTy^>(mg(n9Q zm4=G^Rn0swSeO{XN$7SFj|oKu1oWULt?W8@C5C+kaVI$!KdY1DJf%KBqYbqlRjD$^tcQ>G3xmY4u22s6oF9204ZeiMo;$Rim(YRPs36`%* zsXfbTIwp~n?WDZPi0Q?oaS~L?gO+f(c|dzy%GoG#&>Dm6 zPFFje1Cr<$KWqd#2yhX}xHM~yo$FPKF6mUR@--P)qAnjQ?N%v+h?o_J6Is{5{;ARq z7CBfU2RBqD@u}C5_hkD4Dn*2aa1i~2J z6Ocp|LWBsJPxH<;sB}ywh3giHLo(urjIOrPEAp#p91WF<*2EZ?ugaF{1{B}v;AM8` zomAyXde1m$F3N`-zNA7jYzKyoHHzv;);DyAAh^O&YNm~p9&Cd8N`kT$$%i2&Cj}?D ztwlbRfpn&7L!OmU^fNfrG`wU;abXFA6^8zea%Ch?dcwvTYAwDdZQwW^S1LlvLR{CU zZAQD(fx9h;+t^BgkfdSE$!M#q06(Xp%Zh55Si}4&Ux5E%Ll081>hN;aEghDl`jo-l z5DzMsmcjM94hLLiN&Kht5&cEw4H!viY6+lgfl#TrvZF0h<*z(HoOn2z&`2d_SFZMf z(_2O%c^KHClw(x%lgsz~a~7EhrJgE#Ojg=s!tYIZqJqv-g$8TR9=h&BugN(QIDBj< zI zv^KzhH-K)|@u74THB`Az8RoVC^Mfzb45}?{8{Zou9YW1A3n5Fw%G|0>MTg_(zDfcy zViCkfyG)e3@!uC9A#F4|Uj6e7qn7*6&;N9t95iF9#Kz%gI1oh7Bbkpi3oA+$G5=Ex zPp`Hc&g)hbWn@8>wN{Puoh4f=ya=oM0;YkDm~96iYtcX(j0HQZx>-h=glx{|23 zpwzBfrPCy*rTiaz-yR-Sb@hEF7l;T>K+ve55l2h_F;Sxl5XnFyXJDdf0YwpwqIg$| zGfG7uFcal?9E}!~T5YM-O4YWMDn%5SB#?mh67f<5k%$-eFkB)iM6Bfd{nnY8?BM&p z-}8On^L&3bJ~H!LXP9b>|N| ze^`-`{9br|=hq8UUoYtVHms9+F|W5tlm9xurKf1llMFmJjC4uGe+?t^m^Yks{Fk}$ ze6p@~15@!^@_*+^5;5;|l%1>_Q)l7sO{U@#rpv;=PTh!{|D5Lz?yNVl z^NvG1PH>M@PMvSNaDCi={`(IH{{M0y?LRX29}fJ71OMT`|04%(!XU@%H*@iS@YGvz zmEUp3&A3ODf3#?WfATy_d!A-Il6a1*JB=qEe-aKxrg0D6XP!=e>00_sV-qeT#PH3N-qATKZy*-dm%WY4r28d`yl0rIx-*qYu~8PuA$$ zHF~v1@0q-u5p}&qqra}@KSQJAD%8~9ERFs%jc+v?y;aL+p++B=%Ed71H2R;ldM?rE zS8DX78hy8x|1yoV0+`a&)JWR3o=R&KRMAE4zkL!%dH>1S#5 z>$Lo9H2N4V{X&iYqsE6ijeft@-X$9S8;!nHqaV`pU#8J(wDik0dbU>XDvkcQR{y9* zKTS)&QKSDuqqk`Et7p4L4{7-u^E%~x zkk*e`8hw(MK3k*j)aW@H{Y;IXtI>yP^~}@gX&Sviqwmw`#Txx*8of-Tmucmi8vT2X zUZv4b*7BLG(J#@`S8MduWPIZ97L8u2YV=dJ`m|{DQ#5)_ z;`b%sq8K`Tif4Yx(EYIC9<{?`p}7T#c?JH}W*P)-0nyqigD7 z6l-+0A^BIP(dio{|4fa}Iwk+AG&&aRtklg z8XZ4Tk@}mV(ecv*slQnoo%5;WUyVjj-to?73pF~ftWW*bX>|N#N$PKjM#oS2r2dv_ zbX>Wg`dg;aafN>BZ@EU7;C153DvgexPDuSlHF`;kY8V?eIl{ zrN2d^|4gIL(C9zc=(9BX1dU#!(I;y3g&O?|jb5kGuhi&EH2P$XzEq=MrO}sZ^s6=c za*dw+?G-*=rO}hWaYK4kqhCux;%}oyzb;9{XNyL!*63R_`t=&URioda(UnG@rqSCp z`i&aBU86e^pLiJRl>g~k`YerpvqsO>=*i#y;Nu*Peyf%~SEJvi(epI=?Hav6qu-&? zi#7V48of-T-=)z_jefUAuhQrts?ld_^ko|T0gb*~qtDUkt2FvtjULtL^ECQKjXqza zw`lYQ8hwjK4{7vPjULwMN~70m^frzDphj=k=nrXhBit$f3pIL{Mz=J2wnl$gqvvRJ zTchV{^hY#$o<@&o^a73ks75c==#OdiGL2rR(M^s1xJIwi=uc?$$r}Av8ogShFVg6@ zX!OMzeTGJVQlrn(=uc_%8jZe0qc7Cxzt-q=8vSXFzC@${Mx!s)=+9{MWg7iijlNu? z|5l@~(&)d_=uwTnRHJXy=)c$KEgJnfjlM;r|3Ra-YV_wdy3*(`X!JIX{zr}8uF+rA z=tga){4dk!SsMLM8a-R1zogM~H2TXLJy)Z@qS5m-`kys=fkyv}MlaUrf7R$^8hyD& zH#Pd-GqraxnXK3`58hw^V|A$7e(der*`a+HVx<;?l z=x=EBB^v!rjlNW)uhHnsH2PYNzFecP)99--dQ_uFHF~{9->A_WG2cxMsL>W?HYZfMmHYpl>bc{Jxim%rO~rB`ad;#jz)i5qvvY$cQksQ zMt@hM7ijeNGk{*R|!rdK9#sk@R2&; z(})WMA0X~eoGW-Y@c`m%!8?ghCpH9cB|d|=?MJqMGjT3)tKheY&m?XU+(0~#I4XEG z@ma*n1+O6X5HA({67ku@b%LKG9z3S#8(j42tJkgO5z!U`w&kit`^*b_$uNm!D+--6PF1- z@+j~W;sU`3h_4~e6}+2xDsi^poy6A?8-lkIUq{^bz4SkEHF2xpw}`JNZV}u-d;@V* z@M_{|#LES*Aij}!so4e1U1V2YSow!Eu)5JFu&k+0sF$bVnwcv+|ZzZl0yny&N z;xfVa6W>l;Ab2M69mKhUZzH~wI9u=y#CH)Jg0CjNo4BoA`k#0PajW2Q#J?bJ5j>iB zCUI2oaN>K2mkU0hI6%Bq@L=K~ah>3S#P<@{2tJkgKH?dI`w-6}t`^*b_?N_0g42la zCoU6wBmz8}xIpj$;s=Ox1@9)FL!2#mC-GcjL-1DOdBkmprT>X*h+74}MLeIlMQ{W0 z0^+FP)x;s<<$_lbhl!U8eu=o2xK8kM#19hJ2!5LQA>tW=pCDdHTrK!vVvD#+@B-q8 ziOU4vPizwx2%bs&2yw39+lV8?*@AB%ew5e{d^Pc7#BGP9|B35}TLq6Jew?^P@Mz*E zh@*ms6aR{Mx#07O7ZEQNJeYVfah>3S#7`2}2tJkgDdHJ|`w%Z7t`^*b_}9c$g42kf zCN2|vQ4GuHfCo&k|<~-bwshVngs&;@=UseJA}-yp*_A@LR;cCvFkk zK>QqWRPbuzKM*e$yn^_7;-!LLB7T9mPVjTYe&5uf%QNO8*ltCvFuyj`(lH zErLfAuON;J9!~ss;^l(RCw`T9so=rHuMyV?9!R{BxJK})#Qz|kA-E6mD&lIvJ&0c? zt`eL^yqdU7@DUsM4dMd92Z-M!&K10ycnxv3;GM*4i4DP9iPsUg9hCkjjuN*Dev7!C zxJ7USaRYHw@M_{l;^l%@5U(d*D)=Sh4a9YVpCfJ}t`Yn+aWnA@!A}rxB(4_xF!3hh zD!~hg-y$v(d_VC&i3D*vny&$yVwjxvrMa^MvX2vjJ3m%(zKdQ zt5I!+wZc@+9qy5C7(Q!*FMoSwq$1n2KJ#0<&B)ZHzEEqMKYzVx?NTe@*`tn&@O^Ys z#!zGJxyVOV!wc|P&97$w6h=*JM`dlt!I$0P*;2Vh%==1w_1Py!%nqw^k$dI&p`*9E z!y#7l=nd}L%g~yd`&~2LwQN_-{b_f&Ylq9Xbi-X+z_xC3hhN8MNTr!}zcbL*wRPB; zVpS~i*<;Zzw4`HTZm?4PIN6^Hq7RV=s)p;?cl>k)#GXqYEj+V zTkxVgoQ~$3cIh9`EokBr(`u?H+^b&QMwSMCW>+lo+rcHwncGvrU8ijDsh0E0cz>TA z#QSRq)LM7|OnN_(`a(@vmG-d8+P%R~&Cr~shC93pWF%#|>MR(G7{zSuB@c`-)}a#M z;Tx>2+H#T9s5fg=+kv_E;jM;YZ80M^ZJFY|#yiz}t@paAjcd>8d{4cASNv9oicI0F zbCx;pt%E|MTM`{~@Z~qyQ-15q`0op&@#Ww=`hb!T&fn;+jmkH2p4Nn%N3rO=`!Mk@ zedb{gI{~ag`@zqp)q`#_)Ct3c>)`7$uY2(Z*5G*5prUrKI~+tSLvt1(J7ydz^&tlq z?yjY>n)cLXrX5_0>Z!?tB^RHy-W_g`v}ZDH&@9{*Dm|57-L+YinbO`4p!M-XEO%h1 z5nHQ1hUUdKK}gs3)RePr`=y^J`y&NF*4qZe-fkNDDy@ zZ6enW{KY){zCUtnN9-%iYt|Ob=}dev6E9}Q_MD}Ko7XN)^BQV_$=uzw1JQ0NA$C2! zt!>i^>9`Q@P2ziz%H^wTTwY^s8Ppq1sk!ORqsWf0_1c)DZOHmW2=~t7578$Ivd_7MqHR zt7?D<#a7|l+7GoV`&nfZRMUY2J!xCrZsCf2a@maOuS!H`nQKD zTfJ#`)m$`XYE$NKL2?~zWPQv~Y4i*v2%MIxLhniIR^_60)>j=ZQ)9F7O6*?zGu?eg zxnWGOyTeSB)J*Sr)U*d&hKx+>$lB#-vsgsc6BdCo9{5Hq!=k8rWpqm8^kMEZ!mOg< zUU^y1Rgi7tP`xYob!d}o;blGJuXR3WHBD>k7Qb~NZ?$f!a6)IQeNybBRy;TAZIi5d7GL4Hk2|@=||;qNwaqOVGK>{ zrl>cxFHKdjns#N>ZOoRp^ZPrvmwoA$jZ z0;*`=)atiUKRejwx97BP0z*;wo-Au_Mrgmw&R8=U!oJRUX$(#^WT^(c27Or^WfT!y zL2B?*;*8eO=CK(l%t@@49Gh}_Cx0e@>sxA%<@%Ex+fcQm`*p6fe|3He6H!+%(r0y$ zwJ5!y+`dR%!A4q*W+bEbBviw+wwf3W&HVM{R-1ic?Tu&$hebCgJYWLMUULRLWJB$R z7Qn=ug3h=9D~{9&&vvN|k}iO5{aP5JUUdk~6}5*%9D?iks0G$c{n~l-N-FI_A%Jt> zTKuW${7cD`X&9px7TQ_U0%j6H~silg~BImJY4-ejM3WBWDP3+861dEdxw`J^UwK! zmI`&6ekto@H3kdRc-Zn#@u0wl)Hf3FWUtOeHcWrn zZZHQ0z=XTQ?;>-6+*N0=^oZYcJowuJeqB5}4fp|1c2jxZY<&Lcs?e(8Z=*1GnBKe@>GvhvG|AVBiBT+!((@av@Fr_% zPHSOKSHrhp9o=D`lc?S1uFb(GpHv~GH}oS)ei9ktTe>@Z6gmP+D`M;p+dvc@6jT^3 zw|1|iRa5OlsVA|!@UTuD4-;hU2B=^>S9!YVcW#gUTmP zE-Rc|@}!8;{z&3oLs3_sK%`<56Z}>$gAvU}Z)O>d{Q%41=z)7>x##$iy#nr$J>0d; z$RnY@_5+@t;6llMceppQP(z_5^k|<)5*v(1ZT^O$5^j_CwKO#t^@x2XIlz9CFAMP* z+ve2kpC_g#>*Zy=-jsx8;Ctykzf4tm5Fh>CdE-1Bhw#3ZuKJJ`0j-NYLHW-uCpVH} zugU!UJ;mr5)A~_e#6A=qLjR-b(#zoBTJAMRA0Kj_2gb0YvsU+D5{UJAGPX_hWMMi~ z?p`^tBK&0_Tjf(oZDaJI@@iLZAiLb!j~p)SM!uB6>7|~WgnqJ=X+PtkY?$^do?LwT z?dLs|Nk4D_>GRjKg5qbW6Vc)5_nvX-;U{Nl{obesInr@O6-@6S8!HGu=HAJ9YZ6geStdvVtlesH@L%(k_Knb+To9!ZQqw> zC{HE(BUr`8ZDeEZ(?pLjXcl&;j~ypjaNZbA{FiY{470ia;p#9h43p9Xl zsNEEMyWe;r6{Ufc92;8lSbk|Cp2Uubaun6#al$?*7aAq404HD%pJVDs<`*=UR_4DS zKnYeu{1s}?G5$dd$BQkdb&&GX%JBj|Wq>2c0~k5x@0pw}<^J*>kD;!)8&y2#Q)XS1 zfvnd-?hVzA)-_Ue25N(5Y{bZ@&iaz1(l`12Uthp-@U)_7pZoGJ*pE@nJ1_zMj2w-W zUT`n#xKHheIl>gmP?rj8-Qmr`@d`X_R_6;Xc!eaWB@gX>caf!>^rxw5XOZ%ZCr>I1 z1;Zy5u2?=_@s!Eus~%H6-}F@B6AH+-iC@ZMN1g8&x09)yBn%Tm@DcUGa8MEkgdRVp zs#2*xqf(#;GT0t!{xx4glCKhDTZ76Yn-QjkoC2sYXM@A|a-{UKU>a(N8S}p#%Yz^Y z6JsdrzZOMF-o5>jx6f({+=|g3E_nZn!VZ7r+-w-!+UUF!KH>pS z|2ZWTPwVTNQHIZ5{-avwgmeO1{nlaAg2%4rjAxbbjrEPa03k}qCsL?td5DHZO8*R7 ztZI@GpIY;`k<((2Iq>?u>d*HB3veOBAfp~hF% zei>|m`Es7ZE~yZWhSg9Q4Gm8VtUv`mL{l6lF2pO6UHoZ>@KlOm#eTDsBUH-Yp(9y% zNSzI4(Pz+SH*7N7oVC`CFDmW7NK%FpF|dgp7yq5EoH%zd`y#s6p(ecAoDr+M9>%|meZg})j9rKaj(_?MJgvv?p`j>x z>|R*1+h*$Hh0kg;BfTDVp8pOeV>NWqh@Bna>yQ_Hd=q<>@^6dXD=*E%pjY!i_nrt4 zHR83V^6ovM9dok~mi#c_H|@CvGK9Q{XNN8w3`dP|dno~0qpHV>j>(GqL;lG>Kzf|rHnO%k#B2$o`ADAu?nd5{Un0jc;;54z- zc(!3?nh}^wH>4*^{@BNo1J^@Fd)7v0U1i!63am8pO9qwLU9cL-@%>|Einr~|_hJ+9 z2=eM}u0W|cf8~;KG$r4plY^k=BPEKy4n-%2jCaLI7rl0b4QTLNpC_G)n+75Z80m>O z(_+7L3U~CydnKmE-YfiQ!kO^oCczy22*vPDoWwa(9)hs7hrI4Z>kIc{^gTEBEQ*$X z!?H;4~{R3@#@%d61p$#Pg;q3?K-s+zAh9WQ(!Mk%y#w(uwIz!O)A-e~x|) zn<4r)3XLh;9NRd9o#Z^%{I5u_?np-4Lnj~)^)jvRWF}OI3GWZeb&J@TA}lNzH48;n zL|QotXEQb2+#Gyz6wW1{zn+<(D&+u?Ui;umn2}dK*%`3F$Z?1I>&>DDe{rvLsAl9% zPhWYe0&`h>BbtTT>$6}PM&NArZ(s24DQvV5zNvRU6CrSiTgXM>m^-{4-)&6AE0IHs zS>M{tOos)m%<@M(@B2a{u`wKAC)dSO6jb%Q2q(==xe!k`m4{Cv= zJ5h77Hehn*2-9USC=yWczTyIV(e(gen4J-oKU!p!;XDr zR_*5C>2bfES= z^21(CbkKYm1M%iN(N;SR3od+QkIu4cH{y$Oabg}3q8V8%uZ5yL&G`)!&1C(WkToJ% zW=Tu%Tc3TQ#~z`+=cB)&+7V(w~GhsT31EZbYOJn_g@(*ZQ65wTA$1A+Q$b;lmxCgDJVs z`WPObX+1j&B)|2-41B~-5&7~V2n$!Qe8d{o&>dQVYE)qKum7r>KmE^aY$e=DxG{k( zG!KQFE3HAk=1W;y!xyvP`<_pa!Fao~^TSIq1eAAJf z1JYN}Bf6_Y;8yvdW$EgIt*C5m)MwSZ!zs#&$_Gt*;gR@ zON+7ORhF#rg3H*sw$n6QnugA5p^F)r)Z%OAJiSkVj>rJcuh|%(y;PIDkDs8 zXTI8$W`st#=Jqn}%=d2eB$D{;q7?v?K<_$;r_o$H5he5O=34eXzaj3@TuT|?pV%L7 zb2lcoM|6(wB^`lba70YIZ<9Nm28YS(URxnkjZ=`6U4m>XtV`?>zG=mQ4V>(^b1Bzu%-c_xOk?b>z3TYXOA>-qH{m_^%EfQP1PG%JHMoM^t(Nyys5Q;( zx=xz#qo%c(_M(qO{@_v^Z-(xtT$}|4VqW>%8$5=UwrUhO;Ddh>YB#;>h5)$3yYTP4 zpNHCqyTjLmzoGU~?r=M3@OCQ9X|+@dcB*NIH%Q))v4q4r4=Zf+L{m8PZ6tJ|M`9yn zCWMS`afh!!j{a%whTXL+jFzbP=_nDrK6>d@SvGq?%GMvWdQZ1z`!(&W6ma zhx=S^zpxRhD{8TaU^@*=XiXXG9)Pd6nBOo#aM%7xOpoNd4oo-HFVP$2_Os5b+uY%~ z(0Mz;ig7@K6owkpI*qXP>_|MR#QZtafGZlR$1q--3z8M7#=i+;T5d0<{nm!#3iwvX zdk<9%cDZZQX_lM1pX&^aO=Ht?QFXrUT{za|v!`N;j(YIgE;@htsGlz~FCBp&$T4S4 zW7$~ifH!hkdZ;0zL<)942woVDLSuZhHe%E%dCS|B(LFbKz+TMeAZ@wTYD)v;fe*nO z*9Yvg%dEu)Qm8eXAr$fzrFr4Xq;LDbN$uHIO)0k)w^1JkLLk6qe#b-r)hISF=WZQ7i)_kclb{L zp|~r!&s(zH{m>jB@x#3N+qrOFXl?VkKCJ*J|56x53yfTPmEMx(`wpOlnZHeq&oZ!{ z1E;3aY7WWB?y@5sejQiCz2FToa-y(~4Rpn3VHr8;ufh*U1@2v#s8?Wr?0#5)PJf82 zZh`HQF&$O|D&99Yun*e8_F4$~VI|tJlHER`);U%(l5s|-LT$Q1I)F|eEO9dV%}~We z^7#DM=@U9Kw;BpyxF325RrXqM$9~7ETQ6jzG}xK~INj79f8-jE8$%4-*c?7_{9L~k zuf(3R`gl6}20Icii}c)%%;3X*4Na-A_PA?*1&DZ6@i@D$!ZaV_DtyB6R^J$hU|;CR zjNnJmYpR|(M11E8POznr3hOBNi=xW#bex^BonGT*cF*nfA`vyb3?w?1CY+sdAmgiq z`CnuD1jCf~ZGLx}V?RqC#{MXs6LHFvArxjV!KH+qPKc-9de-R7D=}Fxt#>;n6vOf- zn3*u=2`Tp5@=5^R;YXr;4z$2GJfNR(R%b{D|D{L?~S<`5|_~aUkveF4lu$ zO+X3f-uC8k-XvP&4maZgV#f)+F1NlwKZ;+AAd;E>Y!t0fpS>eZLF6sV9i~I;w=byV z%z*n{B`7Wv5w()(B7w{_nci{ogec^tZqDHxZ3UB`yAETIGv|Y*a9m}rd%gv$Az+Rj++UD(}6zudj@V!m{;x8~@%!FMr0 zT&IzPF=oHL1-YOjGHZ&B-~dP`hew!bOax`@b1z7TIf%W%DQse@>|f53x?13Hjq0)oCpKGwA2!yW!N zGKaKn#q1c}myPOW1m^nf^U+;_d$~IC#O;*bk+qH<*HYWmW#GQlt{FN+iaT71d@QV5 zzP5z*jFe@7FLnHivC40~CSR>uK2&wc5k`@=YKC`)YIlfD3Yca`)#Dj6mSnXd|(_djXc&(<|O#v^$Id(0XiHMaw zvJJa#0|PasO$Y|Ida1Q2j+-)9f^VJbSC8>9csaU#!!@1m*xw<)QfN~$aP>1xaGfD4 zEq-Qld`fVR`(P718`+?)MD`A2A%fc}$C;F4TZASyhK;xpF&@M;V&`C`yjddDv51Ih z($(vpl@8XaPcf#)N^y_?Or-21P|=gML@ztLPt>VMfx5R$>8$%;=GhwpLdP|$-%C+ zjMe?&dzSNYEP!fvnWywaL0BI|y#8NKoJ}J12+zZGf_b5R7;Ap;+vhe+@EHC`;BZ!a z1nLD&{`@gcM)oULv(y}8N8l=~&SI>f2;GilDi{W9gDQlCU^Da0{*r@%8%%o$@qyR5{+*8;tPSz?;!mm5kQBte)MPA9T+OoUvHu_;b!+Hy zsE@_FU!P?uEmkk@qlDk10VrX#6jY3WJ_3-*fPU;vtZ;OWmgGk===g8&1F=SU2l{GcxpI*)@j{aZ`7Um^Wl&I_FQHiI96AF2CSm+=uYFng0VPCr2Rnkne?zNMfa< zWQ*y(bc^4GXBh4Ky_}J5m?d%3J$5?`VLtX6iOt1Pw zH)RLTa^9W6cdZ?G3x?ni$Gn6YLr;&BZVrV;vM!8b(&#F#_D=C= ztb>nLrSpU9AJ__Uho{wy^uL&kAJ_{ayC<=mCV-WY(4Jy&#k7aZRw2Z$xim#P4|BHN zm%mp%jqdWlep*AZ++wBbRly>E3&Z0o+{nMX!D9wU-wlgGk;%d ze+xndvGc%4?7tlc6L1i+qFSL=Sk3I2kczR5*soZ~-Ok#2K&S(&IGL*_ry2L1fhEF7 z=5G$11y$=i&$Kh(Q}kPkC)68vc>_0O8&3L%nLbz2-=0ce-janE?$%$x`dy@#4=Mb1 z=7Gy#CL*OD97O(WUw+B?Gp)B0?S}^wYRED35&6X~a`#`G%#tIV*cmgw)c2G+_51C&8Zo6t~R}>z?Zqm2EVRHsdMXAaFPw7hS#{y|nIi#uQ z^g0f`Q+)QtobkfV*{`-mnJ9Q0jpeFjH6dbL#DJ9VHtUbDdWc?T=AuRA3q9FbiRuZ_ z&e7yLrQd$5-CUi_29?`W2`=QTL?avUdN(+oIlht|?gcZ@fAJL#KRD;ADEKlql**y? z7ka4ImFyA>I!D3IS0^JscX=C@5euOO;CJcoL5lT-#dg+}N`K8H@JVvG=%jw&sM4HS z10w&Zk~)8Bc@&axFnISM3WB|u1(r-Pt;{OC<81fswCHx`Xi(uHcT4QokCgf#nk;HH zCxOl&fA2bY8JT^NQn-jRlk22*zcjwTIhcH(b-WlI)tvd&m7P^gt)F)8j`CVR(pWf~ zr+n6-#O5hy%hWO$fwDu*HC#T<4h%v$Z-F*v2YU}+=tF{uQbX_pw*dABbC?v?0Sb#=6-gA zrOJG0irmwKgINdzVuR6)rgF~=bjT*GWcHWkZ7iV&&f}^) z^=B})2NXt~A?>_1cz0U6nJ$mQo*8JBS<(z+-p++vfiQB}X8uuc$H&+m8LTP`VBj&Ww#`nV8G(SEtkWuuDfFGip>16@h``)Nr!Xeb_@cg7vcY zIdyt;Ex~^EAX|mcOYnZ|2IQNv56JC%I!+Lb0#xbh3G96}9ZZh(f)--`106s06;u$a zy&bbOY(Uk#?`M!>d_ku^Lh*7;3kx8TqHn}A#TbawKWe>1&DZA~tG{r;wt%(aC?&DL zwEUi8KLoSPk8ft+Vt0PIr^=o0_f)&{A-eATXFN4X?#_SSQzxIVc$UiNtDfcZ`KBj| zPcstsw8|%n=lBd!GH65#NJReGT(-@Xy&}p-Ycqd6tAYI=^Y^slOE}6}RI?Vh1WH*8 zl>LaO29MnNixOo&lPLT7MA@%M+3x&TJuQ;%%|so-Vs=aze3a<$xt22;@I055%SGx` zrOG<130_DI6HCnHo;)>&QU3YsS;fRYiurpK0Qm=ovC>tn^yI*BRvKLMv*wFDHAqD6 z)ye1ciJHHXsQIgjn!hPEC->TrF42!M))n<;KcaFuIr50?0}l&8>7V3k9x3R4@K=3+ z=?-ej%AwCY_lv<~w$Z<8$GHrVmG4vzq}2KZUUBEPG>FefRcUakqKSC`$G6yfm>^*= z(#IniFaAZA80^sJ}~PzJVIk z7r;S^7m(gJ4TmMa@I{8M_m%9qC%>~krhOucJOM=}PpDvurJATsCEM@&9ES`}4~%D^ z=8M(BZ%T&a2PEVp((k*=(cVbWTlh%sBz}~H+eIjX`Pj}VRGLk-;D=*7;x zfu?;1_x+rDXiQ&M5PNE7_fyj#G#K{hCHGguy0yKIRz+r=qAp&AFSSsK#=zZ7Y&MU{ z248UAkg;rhjDf2HgD@r=0~BOopLzkgVc!J4W7%aY*fl##eO`^@g_7XE-wSAjkVm|w zv%fI3guZkI--Zrksd*3$jDK12HJZIWnR}Qv2Tr4lBHLKHbMK&sbq}r2k^OE%6M?2Tk(Sq=5O&v3OIo4mhS^6|`nl}F03(y?*w z$K_Uc91=^m-|8+LX=IjPaXu_uD}9#EJVwAw6^ClUpIit6|C%!&Ons|Kd?R0xVGW-r zCUcnNLAGR`mzd*mZijFHcHz*LE|UG?ruB%kU)&1IesMoAH;f0$-1%WoHNJ6Bpc^D6 zRz6{3LZq_?42BarVn81L#XPdF zJNy#gwlj|h0q6{KOJQYU(kftXdiw3NU#H(Ut&xL*$-@XPJABXIia@S8ZJRl5 zvoCVtr{uHhPW#7se`2c7$-lF)J7Ga+RHR($z(JYGu>xl}6}W)b1iPXfV>ykdyzI;& z;)NzRMVp+RBTL4z(IsWb7oi=jSI}QhnM)~DHz3EH$J`G=IQBdywkM)S<5+-n~g(4m$}9>F~+ z`b>wuQ0Rd@Slq4~4bs^iD(H}U`$BtM!8jfy<)54PTx!tYq%;nQr%O;@occCc5M1AZ z00oYc@>B%utNN#Sdnvpw4Ha`D9f)Q;ITlBn{-*m^-ibI#JZXXotl$b-{|sNrr@<5B z15@J{+!a;xNCe#{JATUB?6Pq4(YDXCs}Qgz(w#L zu^rX=#)*O=wu7y~%~;WThbvkW%;b_523{-pHdeI!C8+;RSV^Pr=CuxY$~Zb8%V*;> zG*sy4IAj~BEFUrF?Z8mRF{;oD=&tk*)dWL=AkRsrJqiB8evI0^>P$`s+c9TvNKvgF zi1m-N`X5j)I4=}dmV6a_#tyy>dU-x>7^sXQ@cWIrv>#-&>o&K9y+c|gjDJ*k$Y;G9 ze;51PIX@eTsd0b~{Vur=MIAz?K*n=;p19LK!5^c2iWD72xAVo?O{i!L0DaDV_wMp< z)XU^;a$|Nr62H&H)>h|W*Z{6!z_0RI{nvAcgo$HEjxLf%7(lWZn#`86MK94`2i0NP zSy)0GC4yCHR`K@rTsySf`7xO6dpN3)W({Bv!UZdN8Fw0wc`E_hawS z{ZzdD6CBEhyP?4UkM-;9pS63@xsE#ipf))ClWkIg z(-4cs7>d~e4%>=qbhb~$mt&kOR$o$PaUP&Nwd%=btD|@b>Ukq6fjl3cJROdh&J+8{ zf%qS~+FRDAm3o7ua^5y|o+?kZim6^h84MPwnNo15qqjT!J5WL$X@Svds#A^A@zad5 zY_~NrU5C^UM0w8ggVPWyIy5D5OgP!E>>I`PP8kakBZh3=g6@N!V!Et)y~6!{dxKdx z;k?4p_Z@1LGlc9xOY6rtx`ur%j9dL>F9h^qNf#-4+<8{^k8}*u1$))wco@44d3PCa zXf~YtA^PLkWZ+~ue+$t$0k=F%nO>KyXQ#a>EgX$7bV`0ArDp=i|B;YW${#$6UZBbN zO-(-0u_#kw^AHnB$#c?vmBzeX^ZNuib|dP^b|muK0Gg@-txJCA{WQP-{ygRRP%g0m zsq@leTc^Mhg6yt+0xVP!^k=AeAP!FkHlP`^Mw7kta~GjEP0nS}F%D%W25O-|8m~Y% zp*O0KJh5vJLxP&&2*;J{nF-=M4RSge-PC;#lEa|U)e^U(%uo|h0Ji@GPgTd^wfIX3 zJ~0`LuB21@|BN1-%^pm}YdZBQsY<(F5cA@wQqE6QDUq-G1M))6pTYQrn*ZIa)qI0m ziHD%>DrU`((W7xVmkK@lqhp7_r1$n973bsyd<*^E2NBu8NtEQH%N$B_fGdNLib6Xq zylyWZOMqZUN}lY@&qr}?i!;R#GK}h_rKlU5xg{~YC6^>q>yhdoWIy^adq5xjm!yOlnhGW$8R>$-4+L2 zUG9{FjpZn#c01mwQ{1SAeCb;D7V_zQ6K(%F+a5xw9Mx$>QlC8u6~MN>`AC56fbksB z)6iZyzsxunAKr+EJlD5NmRDZ~LfT!jzaI|MM`maQvKz%B$TzcO1CC9tMWGS?B6*R^FNap%ch!?J7vv?VVQ~^T3TI_&tjE)J% zJd{BhCrQpjY4L?J)W{&G4k!ELE0oIv7Q#ZdB_^I$q{u=UWYV4DZSUav@IY{1_NMXn zjn1Oskg$v!kq|RgXw{KFq7v9HOvcB4gMU;GBr;k5*pKpdQ2`1NbyH6(WM^mErLZdP zc<9tyjd7eJ_M2=j8?WjaTc(6G!SQ0#Q7)F9tOm8~J1JbvL(y<--QjsG1eW_Q5Mnb~ zhef*`dlkD;%E#OCDy#k{yd8f(rO#MjJ2~Ny^+}v*>_LUWsVRhMpmmW;B-ly!Np0T+ zWuwXOvvk1(vB&Wg{uJ+@ zn2xWpdQ29@|7}f-huZxa&~Kb*`cUotgYbx4t6={{eh(ZeTJT<);p|#r)nMVyM!mbZ zR>zEfXpG~3sMG#LJ483MHv|BC*<}O`^eMzPzd1%)nR`)lWaJu7#ZgXODaD4{V^Bu@ z*Wl~Z$F#q5eG9?OH}hca%In+}uviLle3+k;+l7$i32B&sQxG#TZ1YaYnx=mEaD!=IonmG+?c z>CSlGtcvj*1Z)UFs{S24oRvPGeJ9@DVjgZWUDyvC4W4Pb_ClT*uANS+O@lWFdHJkv zD9&fyiIZw0`!jxZ1RnlbPDO&h<$kwrD8XtFpOHqU7YEWv>8N)w?SBJ3CAVof^0lsp zIW|`q{8ancy)Oj6do(BB63spwpf$CiaEFeF(+Vq|v=hcX=ar5@aOK za@RpYSf`n&Ae%53SPpoLe0#4z&m^|uaAsY&m*=Xpe-aFdk96wG7;t}2@N@{r>mx9R ziJ(9;JtCMB(ouQD{$v-*4g}<|ObY{s2>L|M{;)rMmwF4z2=1;#6b-XhhE$h4C;pde z!6$0Ci25fNBY3A`b=iBZ9?$2%)FPsl+%F>&FnE))Uk2VJ7sMfOu>6e3FQO7zmcXt_POCq z%efqqKaAwuq=J=`WNHixP?5kOBpt$Rg&K?VO=GbvP5&JGC@_q2a8Kz+%>Es1Qp!Jx4S{~^_%s-D4R`Th@?;JR z3I9%o!Fx`U&cQI3VWry`Lr`Q+=k)nlKRQzScnQRL&zE8_nU;0SMcwlB{wmxQ^Rb3W z`vZI{+MB`{DQ>;Ei~mt{Bl3l|RPzI~JryGhsT7%`kTOt86|a2;v`CQ;Y2fB1j9~6g zA)dngBBf(ky$C#36w!?&8gE`YVk;R0YIiu**i~$ysU&byp?} z?(kz!NQ_4~!#pF|9!hi$0%wruOSrizKOUHfdkqkfknx#2Y+@L+#ExuG`@jmMe2Z`0 z0Dpy_TZI-t+`RM^_Nu<3sqo6mQ7kB8PmWzb>za}c|L6kTQY(W$H%J|0 zuhC`~+Kd(jGO+AZhwXQzW5n(Jioq!F8b&-Bk2-tcduJIF=rqv`;aK8&#F<26-C+b> z5x<1QNVhZwc5*!3E>`PnwH4ikXmw-;k0tl@9sUjn=HnN$OZ&}!oyze^YF9f~CP(}R z+2HewHet;?bwBd8i#gpJsO|!1olR#&$D@*1o<*cJG38T*t$2uP`7NBRc4}5ToxK&w zoXzsA%#({K2}LsnrNrd>9Y|wm9=VVYZ)#0kX`AFTsu+*k{E zD*kuTw->SU^>D-zOR#DzYYZdXfjJ8dWbISr|IcA@IgmFi^LKb0De8@83WspJ6kZms zP(AUgH#90O&>e?%{qAyX|J$L?K?8mEP!G9h;&f48hSJaPNVK}qU3)LSJLwTIL)N#U zN`4C`1P(};4R-C-&yX4sysjHX883o!xmRs~e#Wu#OlKzxFH4`Pd3Y(li408f57B8v zLVecZR4A0=4`%SA)Z@rQuJLG84^rJ-Taej!sR^1})!Pj1#FdyInvrWV(wZ`GxY_zr z-TAaMB9K*6T&$PwJ#wVF5;`^BDldiBHfO=jsVq4h{MwAncB#m(g+HcM5e<0D z?KvCaeHU)KEHd&(&bV+B>BfY12SmGB9YNddNgHwA4>pchH9!zsA&BegaO?_P3sL*i1!=PPZk2Q9 z384r&4nKR6@_dwn$5|Q1fq^h7|Mfkssqqmhqy_PRIsO-NACKI9)+b)c9a`z+esD2# zYiXV03=KBIxt#Sm*mtb{AeNd?Dmq;KoOv*|b)3O&at_q*=KupUfO|lX12t7X?}pE` z&rLJR+-naxaw!HZ4>_6cie_%q$$@QSfFYY(OgT@^=6Dc9PZn;Ak9X=#k2!x2I2#!3 zlO>|`r$iDV9zLslyTQ$<@Qh@gXd|rtn5K+DMq~`<>Mn7{e383dm?0pTykGr;V+P0M zX55DWd@~dj1;m$P|6&wn1h0+E!Wt!RzSxzno(9_`@dkJ8b+Bvds!zeGzR9@Ecp#3_ zAAoOc2Ocnkd5Hu|&ej>Ca~Btz(G5!u5b1q<;FstFB-2P94) zJwV4t&VhH#%`Ny#+0#z_l1o?eAl6Qf!G2EUJy-lXwh6_T!7y>^yji^}q5v-)!I0ob zaQpu5ioeV8C{@4zv;4mNE$Yt=>BrJ;y;jdzP29&V<&k$7PaQQtlcBP4luOhpzkuKP5r1Tf#2`e=zxw_4N-@>+3Kg ziGtrzw~0aqPKV>jvI7|<>GOJX)b*597F9lM zaHrQgy_0()9}a&oXkP2Im;MfH2`bvJehB@@%>iuc-Jxy-du0hEGjx_~1=MzZHkUo> z)|sf0EdHt9zY;}+Ji|2$^JVCB7L9$cZfEjLkPot1g2S6wqZ^9>2hT^D7Pg6mqS^kE zO*3~U?oEk5rk>ow(&E2{zrmGz+{x3qSPzEDHYZpUI9Ia%i`rmP;`q^azxPi^WNJO? zEAnsm`yBVJ$FN-E;Qt$WSJUaApm*VR;L4)u?!M8#yQaIZjvjRPt}x9+;_}M65QCfX7f^4M7JruYhmVAV z5194CPsKlKh_LHe1DR^SjAxGx#V&05xf2YJA0k%ae+~ODM}Et2 zu?^0^TCKSHtkDSKW(4eVkkMsiT|%fa>bb*=_VId%@ICl~p^dfdyL&Q|f&Uh|8 zGGHee;KHl|^^T<@|8?}()te5h#r+Cg0(pz=W3W3?G*m0~N|cHc%dKzX79Qo}(TYr5 zZ!{`Jmw=!e^#NW@?s|$njEvM!kYab@o2;|p`O@LGnF@SerI;JT8nzYa!iR;;62CQPrDM4lo3~C1v2G4 zm*WTX4pHTLL^vzq#>5Xml(DWy|H)qAe(g+fIQG_iXltrG+4=!f36Z92!^K zBC-F&F`D(eFfZWU*N0Sp6q1ONO!QAfJQ=nM=UR8G6CbAExodQD#>*%L=l4-{>{{`7 zDcCZE|Bu!)sUOOQ&|sGsCP6jK2mP`7-s@-Hdi@P|+_d%(2!&Dj>lm}=@8MY_`*IAf z-TjdpJ&29-f~013q6Og zafjz*dL5_?%@>C3NWb-%FM^Xe%@#v;>iP#!2#y_hssxq^pgPc%(DyFfGl!jCk$z)X zEzI)r_aQ_ujITg7?)?Fu_H3LQDjLEr-K@U61AMfnfK52(b|t$iQhM+#gp0>BsiQ?= zL8bYf{G)w_UHNvBnjK!cDU8OwALvL<2h|CrLMDDtv$K{%YL1 zoGnY#v7aL`{BLw}>?xd#OU=)kvoR;git#*-UEZD&simG!L?bOwu4KmkUe8H!{|Y@Pvm`N2qf`5UNSuM--LeH zgDL*dcpr51;}FkvUc}iv&hVa??8i_eM3CMO=3)G;7-;fFDI@qLHG-BEjD??^T0dY1 zr1IzQ7a5okL9P(=;7`1y{FW7GV$AMP_p=#}iGlhztE;711O7PxvvTb3?9_jm80I9l z-F>GJ#^-y10X%30mWa}e`s3y#n3dR>s3zhy$C`vx)kOXxV_QP)$K97>b!$$`KzE85 zY3EfUV}BQF&%7@ywEs%$lK8f|$mQ#Bh5GlI_iYR9zZevWHf!w-?JvOdj_&vMur68d zYQ_*(|#_H~`#{xcn|BenV&f@>c*Idce>9W(X&Jrf&XFx(4wx+;$CBfz0$pZ@~@D z=1TFZk3~jn73vJkEY!DQlFWM)I45BoZ? zqbhOfbx&?WYGaL+!nS4Qj+^iMp;2ye0v$ zX0?oNsw0ulv9x9Xk^%W=i3)JId4X@?(vMPD&~Hv>IDepP zSEKEz%EKx9K}~mFXHGwa-~bmR1xxx1{Z*)Mcrpl32Gh#$sC*R9NesU8WYt@E0V2Uv zbd#AeS%BARRly*K3$ZkmA@PeW`w9$+r4OIVh{#219E>H)=-k?>>#L@3Tph3n+~dY; z)^~C#5FIV@Ti>3hFXSf1UXjC}>L1Ndr~Le+yq9}*mWNwvVS0C{ z?ln${1Cu5Gw6vr@^S><*=X2o@hGAV7IX_y1Gf>5#_^q&~Og?c&3ZKrIs49HpnW$>{ zT;!P{pU-$|M>iDAMT--Oos}e`oZ3?CzrWlR-L1!?f@rv&K7dF5@#6_LZ@mQLC2Y2By{v2 zzoEF9_r3EsS20;~d~|VxHV4Kt?)4q6vCNJSnRf+`SOkjg5g0@Us7k0I+)iv&r9W@Z=O425^uG~>exj1Q@9%&^Dp>}Sae|^5*M-I%CBh+-0>nyAtKjy&j;s!&kL>Q zl`iawxGsK7u3_G84BraQR5N^CjQ@(U>4B*TtBJcCBR92SJ$NdoiVi<8wZhsB9>u?K z>~^Sh%Sj#{(!fl29Mtv$Aa&7q%&>GFzwbUI-~Z0Sb#O)c2;rM>kR+O zo#mOi@-lv75h6>672OEy6v@mKIwDCD4@d76I|~S@K{v5loj7J=+Si$;bzND!SCSt- zjQ3^s5ZpaO0mQ&@+I$%}cGd2!#LU%v0}^foPbt{Oz+N9T$XxRx`aEHwPA z01lXr$%;2P>m)^If_MIWgq3%|Q=bSgNXGN7If_5j%HWiOfG}8)*x$}oR79$+@0_zu z>iH>{^|Ea4I)6yyKX?`cj4ADs0GsRzLN{@-rUsnF2r-5&VS~_`+P(N`yud~d;1iG` z%s}uBf-A1Z4$;3k@$DN?Qxx3U(vV@DupF9nr712H{SbSs$sK+}E-y3dzfUW9 z_r3uLQPh8(X6BPFGU6R7gnSR^l# zvV8g2G>B+I{lC*Htedj*o#MyzwN@YMN9P@4-|`Bvg%AUrjI!n|u_|9F$4?()CEoog z@A@+%6;W)%EZpX`-h;`5pj6bw{}*L%0v}a%{{PQ}0E2)N6*N}VsIdmuq?$GnQZr@( z6G5==C}Op(%8aOpgic~}JDo~fZPlu^yLD-;Rlp4sw%}U84VMa{$QefkMFXOe z|NC>!oyi1kf8W2amrU-xXMN6dp8Y(h&eAP}#^Q3EKhg9FC6W2NcF{)oC!&w&LY+nXXiu>(`*&ll_SbX;hYALwperH$Q^j<-XUCU@EiMN)&3JI?VMA4vQ@ z%0bk|+Lx}aXqvv3%Uf>@@HS}ZyFmC|I6^n?1%?Sf-!?oC)OLA&|wqKHdJzf4M3P;bq4#m^F00S(RN zUptord9MANxH7h_m@xyD3)WdQE+~bPC zCCA?)ayE}9s9=K?%a%rhOUcx`6nFJn_Gj1+YLRsNcDU_M3d4aa`uO4eom#Z;^{e^P zF=CJyn-Vd1hp)SqH<8qc`6QLxd0yhBhs!9JeJ#p8*Nw6n=qgCg&woas%wn0ke0qXq zr6qmNjm1i!8zksF(czuj)|5WuMnw5PU&)|J)qN>HE#B*ZrNw)i)xV>W?3_OQgi^Ji zhTC4X=r{RM2=(Gf>YI_?=OqBI;BBhqQ8b9+$a9;bLw~Tic}(Jt#FLGliC|AlB{~33 z>fE;GlcZ=P-A%*Y$#Jgy!1sHSdz!7dp zHw~a=p8fKDqq(wp!8a@9yTSfrZEhobErIYv)HVok5T)9jdX@n?LJy|DJt24QzP+ zF3|+* zx$%G5*L7T>kfSe*t2=CGa`H8HCVc{uo0AKI>62gW`EYVd{yJ9sK1;am@;$Og$u2`u z^TSfdqlJqvo5S5oWpd`teEq5C+Ld)C�EZVE#4Cx{lEx#@Tfjwmk*Qup-Gw$IvT; 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%0Am%gG1ftr?(TUX%7 zdoLF3MAm`7b;A6@hi@GKpVEr1t(XtlFwOTA!YliAC+-w~*WjY~IM5f;jRyYdo9 z9HDE7XgVE;d=|wC6{+1a@2E(+_&AP*c+0x72M3p}`81{gwG*O-m}9$b4x0OX`eI@x zw_N)|qldF-IrrZcn1v$VL3(#zu;86~$>m44_O}B)od(}tKq+b@4Zy|W;NZ0{4d zJ%;316U{~ZLC`?BeF}dxrNR}M4KYvOsb%1 z#71XhU7r@UzZ&sg54UymQs>6mpjPT7oWLH%HwQV{WGvV|n~iO4C!!R{t!3sk_L7ho z`SFn6_*Zk1`^XL}F)JmkS@Qp}_9pOARpnNYaH$y91nUC0p;SR!xZ|jxXh5js z|NcDZ&Jvb>m)}1x<<7nL+_OCAInR0abDpiV9hA)Q*?0*SA#M%}H{g2Rcmn`n8Lh3G z{gf6;bwSnY$n3QX`r$5p!v+13M{YQ`KaJNP*(22YY1Q5ZCGZI0W^N<1JCb1qgv6ea z(mAw*9$81c?Gu`#NA{>~o>au=(B%`wyn7bNeO1x0nqMNDB9uAdrX5o-KBHQ10sjX&dOrmLOc0c5~rEdSyu2H@Kv z5pF-rl=`lf^2fUO*YQ3QUsW7#2o>7?)g+o@=z91+c8) z(?jZJZ;y>heTNov`*YRW$n4z<`qeU_i~7&0^`=`AWV>+4ZtsH85GSUWuDf08R^6NP)Sfw7@jM z#%7o%4{nux%@pZcx+Q);-xk%MGSWcp@b~@e+1MmW!A>a$sQk|cy{=+%1WPyWH@*!T zAA>Y|B>5PK@P;ajIT4dJswOd@X7nKlro>Q0FTi^toIJ0vcIYzi@EUK07SmUf1N*=u z%s4warrLk}dAyuMOGu}V4s(t-aE8sN1`D;Y{5hAGmq|fXAuSRjfE^qpKf~zhlaeF* z$oZ_W6X6hXT?2gJWg|xNMkzZz{%IwJa?ITH&RFNScFj$&WZt7@oc@ zpda4a#1Y9zA(|lXh@s2r<+-ShCW)szjE*Az=k_C=cjSG-Uc}NO$MGKgO$@e2!tijf z$W80fA81#-(U>YUCN~JTo)8ig--_cIemDMro0y5f3Ala2EIP^AftM4}Ibp7Tubyyi z(dr4`=6YS1B3#&~^u51?76MB-|yyY-*A!!j6=Jq#l{v2$Ws zVRRN8NH~&Q6!wqbrNPATYMsiqKAHcQi;>uBj<6?Cr8z z{*j$S2A$n|t-rQ6r{7}mjp`?}Zu|WejKJPIGn7ng+MBDDW~e4{_HenCHtwW6;-8h1 zEJk#qssO>A@PILm-~IFq!&)<9Pz5m(9pu9=$ImNzfkOZJZ9e3o_!f%6`6maqS(@hL z$hGQw?DbIVSC6Zsc6eiLQrrA0Q~btAEIp;r%vupgR=0CuZYxF?Fco_R{wOkY@&WJSUPPmgou1Gx^+wl`;(r~kNUwNetmgG zXi5FxYLwN3$Isz*xMG(e((u}cB_@L=(ek4OMp%3AEp^s-wS#Xwjch#~El2 +72lAmy(k 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%0A(hoOzQclEomBij0-`sD2 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

    xj%e_P-~mwtr)3;s@Gm3uyDnX3S+-19-d6jbi{ zU_c5g_k1uY1(ka~7?Og@Js-5CpmNU#6QrPW&j%eTsND0xL@B7;^T8x3sND0xh!j-r z`C!ze6FJs&KUn;J>P5|h=V%!d+;_IEVY)eDE4-W0}HJj?WaHa(t%nloK+A`&FiJ`XkkEmm^V@;a+qA zYYsPZ2*b~H0Q(L9&+o$(l{RWq{R#c2g+L`a!d=M`?n;huS8{~AzrKPNuH*=JB}ce> z(q8E2N{(<>a)i5*Bixl7;jZKecO^%-D>=g5Utn!B_Y>TUqORl!cO^%-D>=el$r0{` zK;ycSBixl7;cnjJxSP07zJOx`uH*=JB}cfs`+1ymawSK&D>=el$r0|l&??K79O16y z2zMn%xO)chd9LILcO^%-D>=el$r0{Wq05V0$r0{Kj&N6UguDBpPpK<8!rj}UdAYkB zlojq6;5)dIBixl7;jZKecO^%-D>=el$r0{Kj&S#6wCe0ij&N6Ugu9X>+`SEay1SAi z+?5>R?qx6HZM5NjhX#K~5>8mT$8c4Sa98CBcMkyhq~V4zB|c@iDo41ha)i4oN4TqU zgu5z7xT|u6yDCSxt8#?9Do40G4mb3DhO2UfyHobzXU_~*a)i6<;gcj+a)i6D zAb6X(_aj)MuH*=JB}cd`Il^7Z5$;NkaQ7axYT>p3WlL9bgu9X>+?5>RuH*=JB}cd` zIl|p!=$YY4j&N6Ugu9X>+?5>RuH*=JB}cd`Il^7Z5$>LcR_$DsBizp%;Z8=Wf%$? z@bHC^2&R^#C*j-h>T19$M|gPcc)%)0czDB~0IM9~;cFiOta5~hx4r^c

    Yonvd0y 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�$;t)k6(|H>atVyR|)lE*C~6dN{=6R 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�VKp) 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�nxerR8mqY3E3MhU4 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

    N>p=S5|hHMSY?V2M9LmYk?!LI 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�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 >@TwD(Vdlr}j>w&(T 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�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 HbqW4I^DEoC diff --git a/Programs/brltty-ktb.c b/Programs/brltty-ktb.c index dcf96b57..3f55b25c 100644 --- a/Programs/brltty-ktb.c +++ b/Programs/brltty-ktb.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty-trtxt.c b/Programs/brltty-trtxt.c index 13ef9afd..3c817f1e 100644 --- a/Programs/brltty-trtxt.c +++ b/Programs/brltty-trtxt.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty-ttb.c b/Programs/brltty-ttb.c index 46c4a5e5..59e8dd8d 100644 --- a/Programs/brltty-ttb.c +++ b/Programs/brltty-ttb.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty-tune.c b/Programs/brltty-tune.c index a01c24d5..ca22b3e7 100644 --- a/Programs/brltty-tune.c +++ b/Programs/brltty-tune.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty.c b/Programs/brltty.c index ccb5c714..245aa214 100644 --- a/Programs/brltty.c +++ b/Programs/brltty.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty.java b/Programs/brltty.java index b617cfb5..f9ebcc5b 100644 --- a/Programs/brltty.java +++ b/Programs/brltty.java @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/brltty_jni.c b/Programs/brltty_jni.c index 50910f7f..2ff53476 100644 --- a/Programs/brltty_jni.c +++ b/Programs/brltty_jni.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/charset.c b/Programs/charset.c index d6a97ed5..9b9526cd 100644 --- a/Programs/charset.c +++ b/Programs/charset.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/charset_grub.c b/Programs/charset_grub.c index 3265581a..ca596724 100644 --- a/Programs/charset_grub.c +++ b/Programs/charset_grub.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/charset_iconv.c b/Programs/charset_iconv.c index b94dc760..8a5c1210 100644 --- a/Programs/charset_iconv.c +++ b/Programs/charset_iconv.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/charset_internal.h b/Programs/charset_internal.h index db7d76e3..63f6318e 100644 --- a/Programs/charset_internal.h +++ b/Programs/charset_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/charset_msdos.c b/Programs/charset_msdos.c index dc19a7f0..897ceb2f 100644 --- a/Programs/charset_msdos.c +++ b/Programs/charset_msdos.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/charset_none.c b/Programs/charset_none.c index 52bbf821..53f7a64f 100644 --- a/Programs/charset_none.c +++ b/Programs/charset_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/charset_windows.c b/Programs/charset_windows.c index 28c37d76..9464e551 100644 --- a/Programs/charset_windows.c +++ b/Programs/charset_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd.c b/Programs/cmd.c index e6b19384..3087c58b 100644 --- a/Programs/cmd.c +++ b/Programs/cmd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_brlapi.c b/Programs/cmd_brlapi.c index 9f2a89e2..c22c41d6 100644 --- a/Programs/cmd_brlapi.c +++ b/Programs/cmd_brlapi.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_brlapi.h b/Programs/cmd_brlapi.h index ebe3c6f0..b7336382 100644 --- a/Programs/cmd_brlapi.h +++ b/Programs/cmd_brlapi.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_clipboard.c b/Programs/cmd_clipboard.c index 125c18ae..2e0a0d27 100644 --- a/Programs/cmd_clipboard.c +++ b/Programs/cmd_clipboard.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_clipboard.h b/Programs/cmd_clipboard.h index 39f248cd..1ca22009 100644 --- a/Programs/cmd_clipboard.h +++ b/Programs/cmd_clipboard.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_custom.c b/Programs/cmd_custom.c index ef6dad0e..b9329e9f 100644 --- a/Programs/cmd_custom.c +++ b/Programs/cmd_custom.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_custom.h b/Programs/cmd_custom.h index ea04df21..fe27e58b 100644 --- a/Programs/cmd_custom.h +++ b/Programs/cmd_custom.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_input.c b/Programs/cmd_input.c index 44bd28da..5ddc2fa7 100644 --- a/Programs/cmd_input.c +++ b/Programs/cmd_input.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -93,9 +93,9 @@ setModifierTimeout (InputCommandData *icd) { return icd->modifiers.timeout? asyncResetAlarmIn(icd->modifiers.timeout, INPUT_STICKY_MODIFIERS_TIMEOUT): - asyncSetAlarmIn(&icd->modifiers.timeout, - INPUT_STICKY_MODIFIERS_TIMEOUT, - handleStickyModifiersTimeout, icd); + asyncNewRelativeAlarm(&icd->modifiers.timeout, + INPUT_STICKY_MODIFIERS_TIMEOUT, + handleStickyModifiersTimeout, icd); } static void diff --git a/Programs/cmd_input.h b/Programs/cmd_input.h index b672aa34..dbcdd67d 100644 --- a/Programs/cmd_input.h +++ b/Programs/cmd_input.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_keycodes.c b/Programs/cmd_keycodes.c index 92ecc44f..d18a2ae9 100644 --- a/Programs/cmd_keycodes.c +++ b/Programs/cmd_keycodes.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_keycodes.h b/Programs/cmd_keycodes.h index 407f6b13..d9bf62f9 100644 --- a/Programs/cmd_keycodes.h +++ b/Programs/cmd_keycodes.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_learn.c b/Programs/cmd_learn.c index b8ea9f40..fc830891 100644 --- a/Programs/cmd_learn.c +++ b/Programs/cmd_learn.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_learn.h b/Programs/cmd_learn.h index 53de6787..ac956e80 100644 --- a/Programs/cmd_learn.h +++ b/Programs/cmd_learn.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_miscellaneous.c b/Programs/cmd_miscellaneous.c index dbbe2a01..442351ae 100644 --- a/Programs/cmd_miscellaneous.c +++ b/Programs/cmd_miscellaneous.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_miscellaneous.h b/Programs/cmd_miscellaneous.h index 45889c4c..7840a66f 100644 --- a/Programs/cmd_miscellaneous.h +++ b/Programs/cmd_miscellaneous.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_navigation.c b/Programs/cmd_navigation.c index bc309f97..d227fa1e 100644 --- a/Programs/cmd_navigation.c +++ b/Programs/cmd_navigation.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -161,7 +161,7 @@ static int testIndent (int column, int row, void *data UNUSED) { int count = column+1; ScreenCharacter characters[count]; - readScreen(0, row, count, 1, characters); + readScreenRow(row, count, characters); while (column >= 0) { wchar_t text = characters[column].text; if (text != WC_C(' ')) return 1; @@ -175,7 +175,7 @@ testPrompt (int column, int row, void *data) { const ScreenCharacter *prompt = data; int count = column+1; ScreenCharacter characters[count]; - readScreen(0, row, count, 1, characters); + readScreenRow(row, count, characters); return isSameRow(characters, prompt, count, isSameText); } @@ -357,7 +357,7 @@ handleNavigationCommands (int command, void *data) { while (1) { int isBlankLine; - readScreen(0, line, scr.cols, 1, characters); + readScreenRow(line, scr.cols, characters); isBlankLine = isAllSpaceCharacters(characters, scr.cols); switch (state) { @@ -401,7 +401,7 @@ handleNavigationCommands (int command, void *data) { int line = ses->winy; while (line <= (int)(scr.rows - brl.textRows)) { - readScreen(0, line, scr.cols, 1, characters); + readScreenRow(line, scr.cols, characters); if (isAllSpaceCharacters(characters, scr.cols) == findBlankLine) { if (!findBlankLine) { @@ -432,7 +432,7 @@ handleNavigationCommands (int command, void *data) { { ScreenCharacter characters[scr.cols]; size_t length = 0; - readScreen(0, ses->winy, scr.cols, 1, characters); + readScreenRow(ses->winy, scr.cols, characters); while (length < scr.cols) { if (characters[length].text == WC_C(' ')) break; ++length; @@ -466,10 +466,10 @@ handleNavigationCommands (int command, void *data) { } case BRL_CMD_CHRLT: - if (!moveWindowLeft(1)) alert(ALERT_BOUNCE); + if (!moveBrailleWindowLeft(1)) alert(ALERT_BOUNCE); break; case BRL_CMD_CHRRT: - if (!moveWindowRight(1)) alert(ALERT_BOUNCE); + if (!moveBrailleWindowRight(1)) alert(ALERT_BOUNCE); break; case BRL_CMD_HWINLT: @@ -510,10 +510,9 @@ handleNavigationCommands (int command, void *data) { if (shiftBrailleWindowLeft(fullWindowShift)) { if (skipBlankBrailleWindows) { - int charCount; - if (prefs.skipBlankBrailleWindowsMode == sbwEndOfLine) goto skipEndOfLine; - charCount = MIN(scr.cols, ses->winx+textCount); + int charCount = MIN(scr.cols, ses->winx+textCount); + if (!showScreenCursor() || (scr.posy != ses->winy) || (scr.posx < 0) || @@ -521,7 +520,7 @@ handleNavigationCommands (int command, void *data) { int charIndex; ScreenCharacter characters[charCount]; - readScreen(0, ses->winy, charCount, 1, characters); + readScreenRow(ses->winy, charCount, characters); for (charIndex=0; charIndexwiny == 0) { ses->winx = oldX; - alert(ALERT_BOUNCE); break; } @@ -550,23 +548,18 @@ handleNavigationCommands (int command, void *data) { skipEndOfLine: if (skipBlankBrailleWindows && (prefs.skipBlankBrailleWindowsMode == sbwEndOfLine)) { - int charIndex; ScreenCharacter characters[scr.cols]; + readScreenRow(ses->winy, scr.cols, characters); + int last = scr.cols; - readScreen(0, ses->winy, scr.cols, 1, characters); - - for (charIndex=scr.cols-1; charIndex>0; charIndex-=1) { - wchar_t text = characters[charIndex].text; - - if (text != WC_C(' ')) break; - } - - if (showScreenCursor() && (scr.posy == ses->winy) && SCR_COLUMN_OK(scr.posx)) { - charIndex = MAX(charIndex, scr.posx); + while (last > 0) { + if (!isWordBreak(characters, ses->winy, --last)) break; } - if (charIndex < ses->winx) placeRightEdge(charIndex); + if (ses->winx > last) placeRightEdge(last); } + + if (prefs.wordWrap) setWordWrapStart(ses->winx); } break; @@ -685,7 +678,7 @@ handleNavigationCommands (int command, void *data) { arg = rescaleInteger(arg, BRL_MSK_ARG, scr.rows-1); } if (arg < scr.rows) { - slideWindowVertically(arg); + slideBrailleWindowVertically(arg); oldwiny = -1; } else { alert(ALERT_COMMAND_REJECTED); diff --git a/Programs/cmd_navigation.h b/Programs/cmd_navigation.h index 8ac4a07e..f7ad91bc 100644 --- a/Programs/cmd_navigation.h +++ b/Programs/cmd_navigation.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_preferences.c b/Programs/cmd_preferences.c index b6394f69..8a1882f5 100644 --- a/Programs/cmd_preferences.c +++ b/Programs/cmd_preferences.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_preferences.h b/Programs/cmd_preferences.h index 64f885a3..ab0beac3 100644 --- a/Programs/cmd_preferences.h +++ b/Programs/cmd_preferences.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_queue.c b/Programs/cmd_queue.c index 15c18987..2af8749e 100644 --- a/Programs/cmd_queue.c +++ b/Programs/cmd_queue.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -226,7 +226,7 @@ setCommandAlarm (void *data) { Queue *queue = getCommandQueue(0); if (queue && (getQueueSize(queue) > 0)) { - asyncSetAlarmIn(&commandAlarm, 0, handleCommandAlarm, data); + asyncNewRelativeAlarm(&commandAlarm, 0, handleCommandAlarm, data); } } } diff --git a/Programs/cmd_queue.h b/Programs/cmd_queue.h index 155d0941..82ac3693 100644 --- a/Programs/cmd_queue.h +++ b/Programs/cmd_queue.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_speech.c b/Programs/cmd_speech.c index 68b6a20e..0d8ba967 100644 --- a/Programs/cmd_speech.c +++ b/Programs/cmd_speech.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -65,7 +65,7 @@ speakDone (const ScreenCharacter *line, int column, int count, int spell) { speakCharacters(line, count, spell); placeBrailleWindowHorizontally(ses->spkx); - slideWindowVertically(ses->spky); + slideBrailleWindowVertically(ses->spky); suppressAutospeak(); } @@ -192,7 +192,7 @@ handleSpeechCommands (int command, void *data) { ScreenCharacter characters[scr.cols]; int column; - readScreen(0, ses->spky, scr.cols, 1, characters); + readScreenRow(ses->spky, scr.cols, characters); if ((column = findFirstNonSpaceCharacter(characters, scr.cols)) >= 0) { ses->spkx = column; speakDone(characters, column, 1, 0); @@ -207,7 +207,7 @@ handleSpeechCommands (int command, void *data) { ScreenCharacter characters[scr.cols]; int column; - readScreen(0, ses->spky, scr.cols, 1, characters); + readScreenRow(ses->spky, scr.cols, characters); if ((column = findLastNonSpaceCharacter(characters, scr.cols)) >= 0) { ses->spkx = column; speakDone(characters, column, 1, 0); @@ -255,7 +255,7 @@ handleSpeechCommands (int command, void *data) { int to = from + 1; findWord: - readScreen(0, row, scr.cols, 1, characters); + readScreenRow(row, scr.cols, characters); type = (row == ses->spky)? getScreenCharacterType(&characters[column]): SCT_SPACE; onCurrentWord = type != SCT_SPACE; @@ -375,10 +375,10 @@ handleSpeechCommands (int command, void *data) { ScreenCharacter current[scr.cols]; unsigned int count = 0; - readScreen(0, ses->spky, scr.cols, 1, original); + readScreenRow(ses->spky, scr.cols, original); do { - readScreen(0, ses->spky+=increment, scr.cols, 1, current); + readScreenRow(ses->spky+=increment, scr.cols, current); if (!isSameRow(original, current, scr.cols, isSameText)) break; alertLineSkipped(&count); } while (ses->spky != limit); @@ -397,7 +397,7 @@ handleSpeechCommands (int command, void *data) { int row = 0; while (row < scr.rows) { - readScreen(0, row, scr.cols, 1, characters); + readScreenRow(row, scr.cols, characters); if (!isAllSpaceCharacters(characters, scr.cols)) break; row += 1; } @@ -418,7 +418,7 @@ handleSpeechCommands (int command, void *data) { int row = scr.rows - 1; while (row >= 0) { - readScreen(0, row, scr.cols, 1, characters); + readScreenRow(row, scr.cols, characters); if (!isAllSpaceCharacters(characters, scr.cols)) break; row -= 1; } diff --git a/Programs/cmd_speech.h b/Programs/cmd_speech.h index 31d78805..d9efb00f 100644 --- a/Programs/cmd_speech.h +++ b/Programs/cmd_speech.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_toggle.c b/Programs/cmd_toggle.c index b5d0a184..e0e7af26 100644 --- a/Programs/cmd_toggle.c +++ b/Programs/cmd_toggle.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -215,11 +215,10 @@ handleToggleCommands (int command, void *data) { break; case BRL_CMD_INFO: - if ((prefs.statusPosition == spNone) || haveStatusCells()) { + if (haveStatusCells() || !(textMaximized || statusCount)) { toggleModeSetting(&infoMode, command); } else { ToggleResult result = toggleModeSetting(&textMaximized, command); - if (result > TOGGLE_SAME) reconfigureBrailleWindow(); } break; diff --git a/Programs/cmd_toggle.h b/Programs/cmd_toggle.h index 889b80ed..3ebf2d85 100644 --- a/Programs/cmd_toggle.h +++ b/Programs/cmd_toggle.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_touch.c b/Programs/cmd_touch.c index eb535ad2..0efa3231 100644 --- a/Programs/cmd_touch.c +++ b/Programs/cmd_touch.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_touch.h b/Programs/cmd_touch.h index 6ad5378e..ff869870 100644 --- a/Programs/cmd_touch.h +++ b/Programs/cmd_touch.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_utils.c b/Programs/cmd_utils.c index 5046c600..c6b77a9e 100644 --- a/Programs/cmd_utils.c +++ b/Programs/cmd_utils.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmd_utils.h b/Programs/cmd_utils.h index f50e41c2..34ab3026 100644 --- a/Programs/cmd_utils.h +++ b/Programs/cmd_utils.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/cmds.awk b/Programs/cmds.awk index 70013452..95228152 100644 --- a/Programs/cmds.awk +++ b/Programs/cmds.awk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/config.c b/Programs/config.c index 875a2a58..54638fec 100644 --- a/Programs/config.c +++ b/Programs/config.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -1508,19 +1508,19 @@ activateBrailleDriver (int verify) { { const char *dev = brailleDevice; - if (isSerialDevice(&dev)) { + if (isSerialDeviceIdentifier(&dev)) { static const char *const serialDrivers[] = { "md", "pm", "ts", "ht", "bn", "al", "bm", "pg", "sk", NULL }; autodetectableDrivers = serialDrivers; - } else if (isUsbDevice(&dev)) { + } else if (isUsbDeviceIdentifier(&dev)) { static const char *const usbDrivers[] = { - "al", "bm", "bn", "eu", "fs", "hd", "hm", "ht", "hw", "mt", "pg", "pm", "sk", "vo", + "al", "bm", "bn", "eu", "fs", "hd", "hm", "ht", "hw", "ic", "mt", "pg", "pm", "sk", "vo", NULL }; autodetectableDrivers = usbDrivers; - } else if (isBluetoothDevice(&dev)) { + } else if (isBluetoothDeviceIdentifier(&dev)) { if (!(autodetectableDrivers = bthGetDriverCodes(dev, BLUETOOTH_DEVICE_NAME_OBTAIN_TIMEOUT))) { static const char *bluetoothDrivers[] = { "np", "ht", "al", "bm", @@ -1584,6 +1584,7 @@ startBrailleDriver (void) { if (activateBrailleDriver(0)) { if (oldPreferencesEnabled) { if (!loadPreferencesFile(oldPreferencesFile)) resetPreferences(); + setPreferenceOverrides(); applyAllPreferences(); } else { applyBraillePreferences(); @@ -1798,8 +1799,8 @@ ASYNC_ALARM_CALLBACK(handleAutospeakDelayAlarm) { static void beginAutospeakDelay (int duration) { - if (asyncSetAlarmIn(&autospeakDelayAlarm, duration, - handleAutospeakDelayAlarm, NULL)) { + if (asyncNewRelativeAlarm(&autospeakDelayAlarm, duration, + handleAutospeakDelayAlarm, NULL)) { spk.canAutospeak = 0; } } @@ -2326,7 +2327,7 @@ tryPidFile (void) { } else if (errno == EEXIST) { return 0; } else { - asyncSetAlarmIn(NULL, PID_FILE_CREATE_RETRY_INTERVAL, retryPidFile, NULL); + asyncNewRelativeAlarm(NULL, PID_FILE_CREATE_RETRY_INTERVAL, retryPidFile, NULL); } return 1; diff --git a/Programs/core.c b/Programs/core.c index 43973765..b2e2ac68 100644 --- a/Programs/core.c +++ b/Programs/core.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -178,7 +178,7 @@ postprocessCommand (void *state, int command, int handled) { describeScreen(&description); if (description.number == scr.number) { - slideWindowVertically(description.posy); + slideBrailleWindowVertically(description.posy); placeBrailleWindowHorizontally(description.posx); } } @@ -555,12 +555,79 @@ getTimeFormattingData (TimeFormattingData *fmt) { fmt->meridian = getMeridianString(&fmt->components.hour); } -void -slideWindowVertically (int y) { - if (y < ses->winy) - ses->winy = y; - else if (y >= (int)(ses->winy + brl.textRows)) - ses->winy = y - (brl.textRows - 1); +int +isWordBreak (const ScreenCharacter *characters, int y, int x) { + if (!iswspace(characters[x].text)) return 0; + return !(showScreenCursor() && (y == scr.posy) && (x == scr.posx)); +} + +int +getWordWrapLength (int row, int from, int count) { + int width = scr.cols; + if (from >= width) return 0; + + int to = from + count; + if (to >= width) return width - from; + + ScreenCharacter characters[width]; + readScreenRow(row, width, characters); + int onWordBreak = iswspace(characters[to].text); + + if (!onWordBreak) { + int index = to; + + while (index > from) { + if (isWordBreak(characters, ses->winy, --index)) { + to = index; + onWordBreak = 1; + break; + } + } + } + + if (onWordBreak) { + while (to < width) { + if (!isWordBreak(characters, ses->winy, to)) break; + to += 1; + } + } + + return to - from; +} + +void +setWordWrapStart (int start) { + if (start < 0) start = 0; + ses->winx = start; + + if (start > 0) { + int end = start + textCount; + if (end > scr.cols) end = scr.cols; + + ScreenCharacter characters[end]; + readScreenRow(ses->winy, end, characters); + + while (end > 0) { + if (!isWordBreak(characters, ses->winy, --end)) { + end += 1; + break; + } + } + + if (!isWordBreak(characters, ses->winy, start-1)) { + while (start < end) { + if (isWordBreak(characters, ses->winy, start)) break; + start += 1; + } + } + + while (start < end) { + if (!isWordBreak(characters, ses->winy, start)) break; + start += 1; + } + + if (start < end) ses->winx = start; + } } void @@ -599,7 +666,7 @@ placeBrailleWindowRight (void) { } int -moveWindowLeft (unsigned int amount) { +moveBrailleWindowLeft (unsigned int amount) { if (ses->winx < 1) return 0; if (amount < 1) return 0; @@ -608,15 +675,13 @@ moveWindowLeft (unsigned int amount) { } int -moveWindowRight (unsigned int amount) { +moveBrailleWindowRight (unsigned int amount) { + if (amount < 1) return 0; int newx = ses->winx + amount; + if (newx >= scr.cols) return 0; - if ((newx > ses->winx) && (newx < scr.cols)) { - ses->winx = newx; - return 1; - } - - return 0; + ses->winx = newx; + return 1; } int @@ -637,6 +702,17 @@ shiftBrailleWindowLeft (unsigned int amount) { } } + if (first > 0) { + ScreenCharacter characters[reference]; + readScreenRow(ses->winy, reference, characters); + + if (!isWordBreak(characters, ses->winy, first-1)) { + while (!isWordBreak(characters, ses->winy, first)) first += 1; + } + + while (isWordBreak(characters, ses->winy, first)) first += 1; + } + if (first == reference) { if (!first) return 0; first -= 1; @@ -647,16 +723,36 @@ shiftBrailleWindowLeft (unsigned int amount) { } #endif /* ENABLE_CONTRACTED_BRAILLE */ - return moveWindowLeft(amount); + if (prefs.wordWrap) { + if (ses->winx < 1) return 0; + setWordWrapStart(ses->winx - amount); + return 1; + } + + return moveBrailleWindowLeft(amount); } int shiftBrailleWindowRight (unsigned int amount) { #ifdef ENABLE_CONTRACTED_BRAILLE - if (isContracting()) amount = getContractedLength(amount); + if (isContracting()) { + amount = getContractedLength(amount); + } else #endif /* ENABLE_CONTRACTED_BRAILLE */ + if (prefs.wordWrap) { + amount = getWordWrapLength(ses->winy, ses->winx, amount); + } - return moveWindowRight(amount); + return moveBrailleWindowRight(amount); +} + +void +slideBrailleWindowVertically (int y) { + if (y < ses->winy) { + ses->winy = y; + } else if (y >= (int)(ses->winy + brl.textRows)) { + ses->winy = y - (brl.textRows - 1); + } } static int @@ -720,8 +816,8 @@ trackScreenCursor (int place) { ses->dcty = ses->trky; int delay = 250 << (prefs.cursorTrackingDelay - 1); - asyncSetAlarmIn(&delayedCursorTrackingAlarm, delay, - handleDelayedCursorTrackingAlarm, NULL); + asyncNewRelativeAlarm(&delayedCursorTrackingAlarm, delay, + handleDelayedCursorTrackingAlarm, NULL); return 1; } @@ -737,7 +833,7 @@ trackScreenCursor (int place) { int length = scr.posx + 1; ScreenCharacter characters[length]; int onspace = 1; - readScreen(0, ses->winy, length, 1, characters); + readScreenRow(ses->winy, length, characters); while (length) { if ((iswspace(characters[--length].text) != 0) != onspace) { if (onspace) { @@ -775,7 +871,7 @@ trackScreenCursor (int place) { ses->winx += (scr.posx - ses->winx) / textCount * textCount; } - slideWindowVertically(scr.posy); + slideBrailleWindowVertically(scr.posy); return 1; } @@ -821,7 +917,7 @@ volatile SpeechSynthesizer spk; void trackSpeech (void) { placeBrailleWindowHorizontally(spk.track.speechLocation % scr.cols); - slideWindowVertically(spk.track.firstLine + (spk.track.speechLocation / scr.cols)); + slideBrailleWindowVertically(spk.track.firstLine + (spk.track.speechLocation / scr.cols)); scheduleUpdate("speech tracked"); } @@ -985,6 +1081,14 @@ isSameAttributes ( return character1->attributes == character2->attributes; } +int +isSameCharacter ( + const ScreenCharacter *character1, + const ScreenCharacter *character2 +) { + return isSameText(character1, character2) && isSameAttributes(character1, character2); +} + int isSameRow ( const ScreenCharacter *characters1, diff --git a/Programs/core.h b/Programs/core.h index 239692e0..84fdbbb6 100644 --- a/Programs/core.h +++ b/Programs/core.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -64,6 +64,12 @@ extern int isSameAttributes ( const ScreenCharacter *character2 ); +extern int +isSameCharacter ( + const ScreenCharacter *character1, + const ScreenCharacter *character2 +); + extern int isSameRow ( const ScreenCharacter *characters1, const ScreenCharacter *characters2, @@ -88,17 +94,21 @@ extern char *opt_keyboardTable; extern int opt_releaseDevice; +extern int isWordBreak (const ScreenCharacter *characters, int y, int x); +extern int getWordWrapLength (int row, int from, int count); +extern void setWordWrapStart (int start); + extern void placeRightEdge (int column); extern void placeBrailleWindowRight (void); extern void placeBrailleWindowHorizontally (int x); -extern int moveWindowLeft (unsigned int amount); -extern int moveWindowRight (unsigned int amount); +extern int moveBrailleWindowLeft (unsigned int amount); +extern int moveBrailleWindowRight (unsigned int amount); extern int shiftBrailleWindowLeft (unsigned int amount); extern int shiftBrailleWindowRight (unsigned int amount); -extern void slideWindowVertically (int y); +extern void slideBrailleWindowVertically (int y); extern int showScreenCursor (void); extern int trackScreenCursor (int place); diff --git a/Programs/ctb_compile.c b/Programs/ctb_compile.c index abc6e5eb..e7aa34d3 100644 --- a/Programs/ctb_compile.c +++ b/Programs/ctb_compile.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -23,6 +23,7 @@ #include #include "log.h" +#include "parse.h" #include "file.h" #include "ctb.h" #include "ctb_internal.h" @@ -529,38 +530,6 @@ static DATA_OPERANDS_PROCESSOR(processContractionTableOperands) { return processDirectiveOperand(file, &directives, "contraction table directive", data); } -int -startContractionCommand (ContractionTable *table) { - if (!table->data.external.commandStarted) { - const char *command[] = {table->command, NULL}; - HostCommandOptions options; - - initializeHostCommandOptions(&options); - options.asynchronous = 1; - options.standardInput = &table->data.external.standardInput; - options.standardOutput = &table->data.external.standardOutput; - - logMessage(LOG_DEBUG, "starting external contraction table: %s", table->command); - if (runHostCommand(command, &options) != 0) return 0; - logMessage(LOG_DEBUG, "external contraction table started: %s", table->command); - - table->data.external.commandStarted = 1; - } - - return 1; -} - -void -stopContractionCommand (ContractionTable *table) { - if (table->data.external.commandStarted) { - fclose(table->data.external.standardInput); - fclose(table->data.external.standardOutput); - - logMessage(LOG_DEBUG, "external contraction table stopped: %s", table->command); - table->data.external.commandStarted = 0; - } -} - static void initializeCommonFields (ContractionTable *table) { table->characters.array = NULL; @@ -580,37 +549,46 @@ initializeCommonFields (ContractionTable *table) { table->cache.offsets.count = 0; } -ContractionTable * -compileContractionTable (const char *fileName) { - ContractionTable *table = NULL; +static void +destroyCommonFields (ContractionTable *table) { + if (table->characters.array) { + free(table->characters.array); + table->characters.array = NULL; + } - if (testProgramPath(fileName)) { - if ((table = malloc(sizeof(*table)))) { - memset(table, 0, sizeof(*table)); + if (table->cache.input.characters) { + free(table->cache.input.characters); + table->cache.input.characters = NULL; + } - if ((table->command = strdup(fileName))) { - initializeCommonFields(table); - table->data.external.commandStarted = 0; + if (table->cache.output.cells) { + free(table->cache.output.cells); + table->cache.output.cells = NULL; + } - table->data.external.input.buffer = NULL; - table->data.external.input.size = 0; + if (table->cache.offsets.array) { + free(table->cache.offsets.array); + table->cache.offsets.array = NULL; + } +} - if (startContractionCommand(table)) { - return table; - } +static void +destroyContractionTable_native (ContractionTable *table) { + destroyCommonFields(table); - free(table->command); - } else { - logMallocError(); - } + if (table->data.internal.size) { + free(table->data.internal.header.fields); + free(table); + } +} - free(table); - } else { - logMallocError(); - } +static const ContractionTableManagementMethods nativeManagementMethods = { + .destroy = destroyContractionTable_native +}; - return NULL; - } +static ContractionTable * +compileContractionTable_native (const char *fileName) { + ContractionTable *table = NULL; if (setTableDataVariables(CONTRACTION_TABLE_EXTENSION, CONTRACTION_SUBTABLE_EXTENSION)) { ContractionTableData ctd; @@ -641,8 +619,9 @@ compileContractionTable (const char *fileName) { if (processDataFile(fileName, ¶meters)) { if (saveCharacterTable(&ctd)) { if ((table = malloc(sizeof(*table)))) { + table->managementMethods = &nativeManagementMethods; + table->translationMethods = getContractionTableTranslationMethods_native(); initializeCommonFields(table); - table->command = NULL; table->data.internal.header.fields = getContractionTableHeader(&ctd); table->data.internal.size = getDataSize(ctd.area); @@ -666,39 +645,182 @@ compileContractionTable (const char *fileName) { return table; } +int +startContractionCommand (ContractionTable *table) { + if (!table->data.external.commandStarted) { + const char *command[] = {table->data.external.command, NULL}; + HostCommandOptions options; + + initializeHostCommandOptions(&options); + options.asynchronous = 1; + options.standardInput = &table->data.external.standardInput; + options.standardOutput = &table->data.external.standardOutput; + + logMessage(LOG_DEBUG, "starting external contraction table: %s", table->data.external.command); + if (runHostCommand(command, &options) != 0) return 0; + logMessage(LOG_DEBUG, "external contraction table started: %s", table->data.external.command); + + table->data.external.commandStarted = 1; + } + + return 1; +} + void -destroyContractionTable (ContractionTable *table) { - if (table->characters.array) { - free(table->characters.array); - table->characters.array = NULL; +stopContractionCommand (ContractionTable *table) { + if (table->data.external.commandStarted) { + fclose(table->data.external.standardInput); + fclose(table->data.external.standardOutput); + + logMessage(LOG_DEBUG, "external contraction table stopped: %s", table->data.external.command); + table->data.external.commandStarted = 0; } +} - if (table->cache.input.characters) { - free(table->cache.input.characters); - table->cache.input.characters = NULL; +static void +destroyContractionTable_external (ContractionTable *table) { + stopContractionCommand(table); + if (table->data.external.input.buffer) free(table->data.external.input.buffer); + free(table->data.external.command); + + destroyCommonFields(table); + free(table); +} + +static const ContractionTableManagementMethods externalManagementMethods = { + .destroy = destroyContractionTable_external +}; + +static ContractionTable * +compileContractionTable_external (const char *fileName) { + ContractionTable *table; + + if ((table = malloc(sizeof(*table)))) { + memset(table, 0, sizeof(*table)); + + if ((table->data.external.command = strdup(fileName))) { + table->managementMethods = &externalManagementMethods; + table->translationMethods = getContractionTableTranslationMethods_external(); + initializeCommonFields(table); + + table->data.external.commandStarted = 0; + + table->data.external.input.buffer = NULL; + table->data.external.input.size = 0; + + if (startContractionCommand(table)) { + return table; + } + + free(table->data.external.command); + } else { + logMallocError(); + } + + free(table); + } else { + logMallocError(); } - if (table->cache.output.cells) { - free(table->cache.output.cells); - table->cache.output.cells = NULL; + return NULL; +} + +#ifdef LOUIS_TABLES_DIRECTORY +static void +destroyContractionTable_louis (ContractionTable *table) { + free(table->data.louis.tableList); + + destroyCommonFields(table); + free(table); +} + +static const ContractionTableManagementMethods louisManagementMethods = { + .destroy = destroyContractionTable_louis +}; + +static ContractionTable * +compileContractionTable_louis (const char *fileName) { + ContractionTable *table; + + if ((table = malloc(sizeof(*table)))) { + memset(table, 0, sizeof(*table)); + + if ((table->data.louis.tableList = strdup(fileName))) { + table->managementMethods = &louisManagementMethods; + table->translationMethods = getContractionTableTranslationMethods_louis(); + initializeCommonFields(table); + + return table; + } else { + logMallocError(); + } + + free(table); + } else { + logMallocError(); } - if (table->cache.offsets.array) { - free(table->cache.offsets.array); - table->cache.offsets.array = NULL; + return NULL; +} +#endif /* LOUIS_TABLES_DIRECTORY */ + +typedef ContractionTable *ContractionTableCompileFunction (const char *fileName); + +typedef struct { + const char *qualifier; + ContractionTableCompileFunction *compile; + const char *directory; +} ContractionTableQualifierEntry; + +static const ContractionTableQualifierEntry contractionTableQualifierTable[] = { +#ifdef LOUIS_TABLES_DIRECTORY + { .qualifier = "louis", + .compile = &compileContractionTable_louis, + .directory = LOUIS_TABLES_DIRECTORY + }, +#endif /* LOUIS_TABLES_DIRECTORY */ + + { .qualifier = NULL } +}; + +const ContractionTableQualifierEntry * +getContractionTableQualifierEntry (const char **fileName) { + const ContractionTableQualifierEntry *entry = contractionTableQualifierTable; + + while (entry->qualifier) { + if (hasQualifier(fileName, entry->qualifier)) return entry; + entry += 1; } - if (table->command) { - stopContractionCommand(table); - if (table->data.external.input.buffer) free(table->data.external.input.buffer); - free(table->command); - free(table); + return NULL; +} + +ContractionTable * +compileContractionTable (const char *fileName) { + ContractionTableCompileFunction *compile = NULL; + const ContractionTableQualifierEntry *ctq = getContractionTableQualifierEntry(&fileName); + + if (ctq) { + compile = ctq->compile; } else { - if (table->data.internal.size) { - free(table->data.internal.header.fields); - free(table); + if (!hasNoQualifier(fileName)) { + logMessage(LOG_ERR, "unsupported contraction table: %s", fileName); + return NULL; + } + + if (testProgramPath(fileName)) { + compile = &compileContractionTable_external; + } else { + compile = &compileContractionTable_native; } } + + return compile(fileName); +} + +void +destroyContractionTable (ContractionTable *table) { + table->managementMethods->destroy(table); } char * @@ -708,13 +830,40 @@ ensureContractionTableExtension (const char *path) { char * makeContractionTablePath (const char *directory, const char *name) { - char *subdirectory = makePath(directory, CONTRACTION_TABLES_SUBDIRECTORY); + const char *qualifier = name; + const ContractionTableQualifierEntry *ctq = getContractionTableQualifierEntry(&name); + if (!ctq) hasQualifier(&name, NULL); + int qualifierLength = name - qualifier; + + char *path; + const char *extension; + + if (ctq && ctq->directory) { + if (!(path = strdup(ctq->directory))) logMallocError(); + extension = NULL; + } else { + path = makePath(directory, CONTRACTION_TABLES_SUBDIRECTORY); + extension = CONTRACTION_TABLE_EXTENSION; + } - if (subdirectory) { - char *file = makeFilePath(subdirectory, name, CONTRACTION_TABLE_EXTENSION); + if (path) { + char *file = makeFilePath(path, name, extension); - free(subdirectory); - if (file) return file; + free(path); + path = NULL; + + if (file) { + if (qualifierLength) { + char buffer[qualifierLength + strlen(file) + 1]; + snprintf(buffer, sizeof(buffer), "%.*s%s", + qualifierLength, qualifier, file); + + free(file); + if (!(file = strdup(buffer))) logMallocError(); + } + + if (file) return file; + } } return NULL; diff --git a/Programs/ctb_external.c b/Programs/ctb_external.c new file mode 100644 index 00000000..4062ab0b --- /dev/null +++ b/Programs/ctb_external.c @@ -0,0 +1,361 @@ +/* + * BRLTTY - A background process providing access to the console screen (when in + * text mode) for a blind person using a refreshable braille display. + * + * Copyright (C) 1995-2018 by The BRLTTY Developers. + * + * BRLTTY comes with ABSOLUTELY NO WARRANTY. + * + * This is free software, placed under the terms of the + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. + * + * Web Page: http://brltty.com/ + * + * This software is maintained by Dave Mielke . + */ + +#include "prologue.h" + +#include +#include + +#include "log.h" +#include "ctb_translate.h" +#include "brl_dots.h" +#include "file.h" +#include "parse.h" +#include "charset.h" + +static int +putExternalRequests (BrailleContractionData *bcd) { + typedef enum { + REQ_TEXT, + REQ_NUMBER + } ExternalRequestType; + + typedef struct { + const char *name; + ExternalRequestType type; + + union { + struct { + const wchar_t *start; + size_t count; + } text; + + unsigned int number; + } value; + } ExternalRequestEntry; + + const ExternalRequestEntry externalRequestTable[] = { + { .name = "cursor-position", + .type = REQ_NUMBER, + .value.number = bcd->input.cursor? bcd->input.cursor-bcd->input.begin+1: 0 + }, + + { .name = "expand-current-word", + .type = REQ_NUMBER, + .value.number = prefs.expandCurrentWord + }, + + { .name = "capitalization-mode", + .type = REQ_NUMBER, + .value.number = prefs.capitalizationMode + }, + + { .name = "maximum-length", + .type = REQ_NUMBER, + .value.number = getOutputCount(bcd) + }, + + { .name = "text", + .type = REQ_TEXT, + .value.text = { + .start = bcd->input.begin, + .count = getInputCount(bcd) + } + }, + + { .name = NULL } + }; + + FILE *stream = bcd->table->data.external.standardInput; + const ExternalRequestEntry *req = externalRequestTable; + + while (req->name) { + if (fputs(req->name, stream) == EOF) goto outputError; + if (fputc('=', stream) == EOF) goto outputError; + + switch (req->type) { + case REQ_TEXT: { + const wchar_t *character = req->value.text.start; + const wchar_t *end = character + req->value.text.count; + + while (character < end) { + Utf8Buffer utf8; + size_t utfs = convertWcharToUtf8(*character++, utf8); + + if (!utfs) return 0; + if (fputs(utf8, stream) == EOF) goto outputError; + } + + break; + } + + case REQ_NUMBER: + if (fprintf(stream, "%u", req->value.number) == EOF) goto outputError; + break; + + default: + logMessage(LOG_WARNING, "unimplemented external contraction request property type: %s: %u (%s)", bcd->table->data.external.command, req->type, req->name); + return 0; + } + + if (fputc('\n', stream) == EOF) goto outputError; + req += 1; + } + + if (fflush(stream) == EOF) goto outputError; + return 1; + +outputError: + logMessage(LOG_WARNING, "external contraction output error: %s: %s", bcd->table->data.external.command, strerror(errno)); + return 0; +} + +static const unsigned char brfTable[0X40] = { + /* 0X20 */ 0, + /* 0X21 ! */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, + /* 0X22 " */ BRL_DOT_5, + /* 0X23 # */ BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, + /* 0X24 $ */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_6, + /* 0X25 % */ BRL_DOT_1 | BRL_DOT_4 | BRL_DOT_6, + /* 0X26 & */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, + /* 0X27 ' */ BRL_DOT_3, + /* 0X28 ( */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, + /* 0X29 ) */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, + /* 0X2A * */ BRL_DOT_1 | BRL_DOT_6, + /* 0X2B + */ BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, + /* 0X2C , */ BRL_DOT_6, + /* 0X2D - */ BRL_DOT_3 | BRL_DOT_6, + /* 0X2E . */ BRL_DOT_4 | BRL_DOT_6, + /* 0X2F / */ BRL_DOT_3 | BRL_DOT_4, + /* 0X30 0 */ BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, + /* 0X31 1 */ BRL_DOT_2, + /* 0X32 2 */ BRL_DOT_2 | BRL_DOT_3, + /* 0X33 3 */ BRL_DOT_2 | BRL_DOT_5, + /* 0X34 4 */ BRL_DOT_2 | BRL_DOT_5 | BRL_DOT_6, + /* 0X35 5 */ BRL_DOT_2 | BRL_DOT_6, + /* 0X36 6 */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5, + /* 0X37 7 */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, + /* 0X38 8 */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_6, + /* 0X39 9 */ BRL_DOT_3 | BRL_DOT_5, + /* 0X3A : */ BRL_DOT_1 | BRL_DOT_5 | BRL_DOT_6, + /* 0X3B ; */ BRL_DOT_5 | BRL_DOT_6, + /* 0X3C < */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_6, + /* 0X3D = */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, + /* 0X3E > */ BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, + /* 0X3F ? */ BRL_DOT_1 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, + /* 0X40 @ */ BRL_DOT_4, + /* 0X41 A */ BRL_DOT_1, + /* 0X42 B */ BRL_DOT_1 | BRL_DOT_2, + /* 0X43 C */ BRL_DOT_1 | BRL_DOT_4, + /* 0X44 D */ BRL_DOT_1 | BRL_DOT_4 | BRL_DOT_5, + /* 0X45 E */ BRL_DOT_1 | BRL_DOT_5, + /* 0X46 F */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4, + /* 0X47 G */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5, + /* 0X48 H */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_5, + /* 0X49 I */ BRL_DOT_2 | BRL_DOT_4, + /* 0X4A J */ BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5, + /* 0X4B K */ BRL_DOT_1 | BRL_DOT_3, + /* 0X4C L */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3, + /* 0X4D M */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4, + /* 0X4E N */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, + /* 0X4F O */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_5, + /* 0X50 P */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4, + /* 0X51 Q */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, + /* 0X52 R */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5, + /* 0X53 S */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4, + /* 0X54 T */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, + /* 0X55 U */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_6, + /* 0X56 V */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_6, + /* 0X57 W */ BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, + /* 0X58 X */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, + /* 0X59 Y */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, + /* 0X5A Z */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, + /* 0X5B [ */ BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_6, + /* 0X5C \ */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_5 | BRL_DOT_6, + /* 0X5D ] */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, + /* 0X5E ^ */ BRL_DOT_4 | BRL_DOT_5, + /* 0X5F _ */ BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6 +}; + +static int +handleExternalResponse_brf (BrailleContractionData *bcd, const char *value) { + int useDot7 = prefs.capitalizationMode == CTB_CAP_DOT7; + + while (*value && (bcd->output.current < bcd->output.end)) { + unsigned char brf = *value++ & 0XFF; + unsigned char dots = 0; + unsigned char superimpose = 0; + + if ((brf >= 0X60) && (brf <= 0X7F)) { + brf -= 0X20; + } else if ((brf >= 0X41) && (brf <= 0X5A)) { + if (useDot7) superimpose |= BRL_DOT_7; + } + + if ((brf >= 0X20) && (brf <= 0X5F)) dots = brfTable[brf - 0X20] | superimpose; + *bcd->output.current++ = dots; + } + + return 1; +} + +static int +handleExternalResponse_consumedLength (BrailleContractionData *bcd, const char *value) { + int length; + + if (!isInteger(&length, value)) return 0; + if (length < 1) return 0; + if (length > getInputCount(bcd)) return 0; + + bcd->input.current = bcd->input.begin + length; + return 1; +} + +static int +handleExternalResponse_outputOffsets (BrailleContractionData *bcd, const char *value) { + if (bcd->input.offsets) { + int previous = CTB_NO_OFFSET; + unsigned int count = getInputCount(bcd); + unsigned int index = 0; + + while (*value && (index < count)) { + int offset; + + { + char *delimiter = strchr(value, ','); + + if (delimiter) { + int ok; + + { + char oldDelimiter = *delimiter; + *delimiter = 0; + ok = isInteger(&offset, value); + *delimiter = oldDelimiter; + } + + if (!ok) return 0; + value = delimiter + 1; + } else if (isInteger(&offset, value)) { + value += strlen(value); + } else { + return 0; + } + } + + if (offset < ((index == 0)? 0: previous)) return 0; + if (offset >= getOutputCount(bcd)) return 0; + + bcd->input.offsets[index++] = (offset == previous)? CTB_NO_OFFSET: offset; + previous = offset; + } + } + + return 1; +} + +typedef struct { + const char *name; + int (*handler) (BrailleContractionData *bcd, const char *value); + unsigned stop:1; +} ExternalResponseEntry; + +static const ExternalResponseEntry externalResponseTable[] = { + { .name = "brf", + .stop = 1, + .handler = handleExternalResponse_brf + }, + + { .name = "consumed-length", + .handler = handleExternalResponse_consumedLength + }, + + { .name = "output-offsets", + .handler = handleExternalResponse_outputOffsets + }, + + { .name = NULL } +}; + +static int +getExternalResponses (BrailleContractionData *bcd) { + FILE *stream = bcd->table->data.external.standardOutput; + + while (readLine(stream, &bcd->table->data.external.input.buffer, &bcd->table->data.external.input.size)) { + int ok = 0; + int stop = 0; + char *delimiter = strchr(bcd->table->data.external.input.buffer, '='); + + if (delimiter) { + const char *value = delimiter + 1; + const ExternalResponseEntry *rsp = externalResponseTable; + + char oldDelimiter = *delimiter; + *delimiter = 0; + + while (rsp->name) { + if (strcmp(bcd->table->data.external.input.buffer, rsp->name) == 0) { + if (rsp->handler(bcd, value)) ok = 1; + if (rsp->stop) stop = 1; + break; + } + + rsp += 1; + } + + *delimiter = oldDelimiter; + } + + if (!ok) logMessage(LOG_WARNING, "unexpected external contraction response: %s: %s", bcd->table->data.external.command, bcd->table->data.external.input.buffer); + if (stop) return 1; + } + + logMessage(LOG_WARNING, "incomplete external contraction response: %s", bcd->table->data.external.command); + return 0; +} + +static int +contractText_external (BrailleContractionData *bcd) { + setOffset(bcd); + while (++bcd->input.current < bcd->input.end) clearOffset(bcd); + + if (startContractionCommand(bcd->table)) { + if (putExternalRequests(bcd)) { + if (getExternalResponses(bcd)) { + return 1; + } + } + } + + stopContractionCommand(bcd->table); + return 0; +} + +static void +finishCharacterEntry_external (BrailleContractionData *bcd, CharacterEntry *entry) { +} + +static const ContractionTableTranslationMethods externalTranslationMethods = { + .contractText = contractText_external, + .finishCharacterEntry = finishCharacterEntry_external +}; + +const ContractionTableTranslationMethods * +getContractionTableTranslationMethods_external (void) { + return &externalTranslationMethods; +} diff --git a/Programs/ctb_internal.h b/Programs/ctb_internal.h index 798d56e1..eece1f1d 100644 --- a/Programs/ctb_internal.h +++ b/Programs/ctb_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -119,7 +119,20 @@ typedef struct { const ContractionTableRule *always; } CharacterEntry; +typedef struct { + void (*destroy) (ContractionTable *table); +} ContractionTableManagementMethods; + +typedef struct ContractionTableTranslationMethodsStruct ContractionTableTranslationMethods; +typedef const ContractionTableTranslationMethods *GetContractionTableTranslationMethodsFunction (void); +extern GetContractionTableTranslationMethodsFunction getContractionTableTranslationMethods_native; +extern GetContractionTableTranslationMethodsFunction getContractionTableTranslationMethods_external; +extern GetContractionTableTranslationMethodsFunction getContractionTableTranslationMethods_louis; + struct ContractionTableStruct { + const ContractionTableManagementMethods *managementMethods; + const ContractionTableTranslationMethods *translationMethods; + struct { CharacterEntry *array; int size; @@ -152,8 +165,6 @@ struct ContractionTableStruct { unsigned char capitalizationMode; } cache; - char *command; - union { struct { union { @@ -165,15 +176,22 @@ struct ContractionTableStruct { } internal; struct { - unsigned commandStarted:1; + char *command; FILE *standardInput; FILE *standardOutput; + unsigned commandStarted:1; struct { char *buffer; size_t size; } input; } external; + +#ifdef LOUIS_TABLES_DIRECTORY + struct { + char *tableList; + } louis; +#endif /* LOUIS_TABLES_DIRECTORY */ } data; }; diff --git a/Programs/ctb_louis.c b/Programs/ctb_louis.c new file mode 100644 index 00000000..1a228a64 --- /dev/null +++ b/Programs/ctb_louis.c @@ -0,0 +1,128 @@ +/* + * BRLTTY - A background process providing access to the console screen (when in + * text mode) for a blind person using a refreshable braille display. + * + * Copyright (C) 1995-2018 by The BRLTTY Developers. + * + * BRLTTY comes with ABSOLUTELY NO WARRANTY. + * + * This is free software, placed under the terms of the + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. + * + * Web Page: http://brltty.com/ + * + * This software is maintained by Dave Mielke . + */ + +#include "prologue.h" + +#include + +#include "log.h" +#include "ctb_translate.h" +#include "prefs.h" + +static void +initialize (void) { + static unsigned char initialized = 0; + + if (!initialized) { + int logLevel = LOG_INFO; + + logMessage(logLevel, "LibLouis version: %s", lou_version()); + logMessage(logLevel, "LibLouis Data Directory: %s", lou_getDataPath()); + logMessage(logLevel, "LibLouis Character Size: %d", lou_charSize()); + + initialized = 1; + } +} + +static int +contractText_louis (BrailleContractionData *bcd) { + initialize(); + + int inputLength = getInputCount(bcd); + widechar inputBuffer[inputLength]; + int outputOffsets[inputLength]; + + { + const wchar_t *source = bcd->input.begin; + widechar *target = inputBuffer; + + while (source < bcd->input.end) { + *target++ = *source++; + } + } + + int outputLength = getOutputCount(bcd); + widechar outputBuffer[outputLength]; + int inputOffsets[outputLength]; + + int *cursor = NULL; + int position; + + if (bcd->input.cursor) { + position = bcd->input.cursor - bcd->input.begin; + if ((position >= 0) && (position < inputLength)) cursor = &position; + } + + int translationMode = dotsIO | ucBrl; + if (prefs.expandCurrentWord) translationMode |= compbrlAtCursor; + + int translated = lou_translate( + bcd->table->data.louis.tableList, + inputBuffer, &inputLength, outputBuffer, &outputLength, + NULL /* typeForm */, NULL /* spacing */, + outputOffsets, inputOffsets, cursor, translationMode + ); + + if (translated) { + bcd->input.current = bcd->input.begin + inputLength; + bcd->output.current = bcd->output.begin + outputLength; + + { + const widechar *source = outputBuffer; + BYTE *target = bcd->output.begin; + + while (target < bcd->output.current) { + *target++ = *source++ & 0XFF; + } + } + + if (bcd->input.offsets) { + const int *source = outputOffsets; + int *target = bcd->input.offsets; + const int *end = target + inputLength; + int previousOffset = -1; + + while (target < end) { + int offset = *source++; + int same = offset == previousOffset; + + *target++ = same? CTB_NO_OFFSET: offset; + previousOffset = offset; + } + + end += bcd->input.end - bcd->input.current; + while (target < end) *target++ = CTB_NO_OFFSET; + } + } + + return translated; +} + +static void +finishCharacterEntry_louis (BrailleContractionData *bcd, CharacterEntry *entry) { +} + +static const ContractionTableTranslationMethods louisTranslationMethods = { + .contractText = contractText_louis, + .finishCharacterEntry = finishCharacterEntry_louis +}; + +const ContractionTableTranslationMethods * +getContractionTableTranslationMethods_louis (void) { + return &louisTranslationMethods; +} diff --git a/Programs/ctb_native.c b/Programs/ctb_native.c new file mode 100644 index 00000000..5c8cb0ff --- /dev/null +++ b/Programs/ctb_native.c @@ -0,0 +1,1107 @@ +/* + * BRLTTY - A background process providing access to the console screen (when in + * text mode) for a blind person using a refreshable braille display. + * + * Copyright (C) 1995-2018 by The BRLTTY Developers. + * + * BRLTTY comes with ABSOLUTELY NO WARRANTY. + * + * This is free software, placed under the terms of the + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. + * + * Web Page: http://brltty.com/ + * + * This software is maintained by Dave Mielke . + */ + +#include "prologue.h" + +#include + +#ifdef HAVE_ICU +#endif /* HAVE_ICU */ + +#include "log.h" +#include "ctb_translate.h" +#include "brl_dots.h" +#include "unicode.h" + +#ifdef HAVE_ICU +#include + +typedef struct { + unsigned int index; + ULineBreak after; + ULineBreak before; + ULineBreak previous; + ULineBreak indirect; +} LineBreakOpportunitiesState; + +static void +prepareLineBreakOpportunitiesState (LineBreakOpportunitiesState *lbo) { + lbo->index = 0; + lbo->after = U_LB_SPACE; + lbo->before = lbo->after; + lbo->previous = lbo->before; + lbo->indirect = U_LB_SPACE; +} + +static void +findLineBreakOpportunities ( + BrailleContractionData *bcd, + LineBreakOpportunitiesState *lbo, + unsigned char *opportunities, + const wchar_t *characters, unsigned int limit +) { + /* UAX #14: Line Breaking Properties + * http://unicode.org/reports/tr14/ + * Section 6: Line Breaking Algorithm + * + * ! Mandatory break at the indicated position + * ^ No break allowed at the indicated position + * _ Break allowed at the indicated position + * + * H ideographs + * h small kana + * 9 digits + */ + + while (lbo->index <= limit) { + unsigned char *opportunity = &opportunities[lbo->index]; + + lbo->previous = lbo->before; + lbo->before = lbo->after; + lbo->after = u_getIntPropertyValue(characters[lbo->index], UCHAR_LINE_BREAK); + lbo->index += 1; + + /* LB9 Do not break a combining character sequence. + */ + if (lbo->after == U_LB_COMBINING_MARK) { + /* LB10: Treat any remaining combining mark as AL. + */ + if ((lbo->before == U_LB_MANDATORY_BREAK) || + (lbo->before == U_LB_CARRIAGE_RETURN) || + (lbo->before == U_LB_LINE_FEED) || + (lbo->before == U_LB_NEXT_LINE) || + (lbo->before == U_LB_SPACE) || + (lbo->before == U_LB_ZWSPACE)) { + lbo->before = U_LB_ALPHABETIC; + } + + /* treat it as if it has the line breaking class of the base character + */ + lbo->after = lbo->before; + *opportunity = 0; + continue; + } + + if (lbo->before != U_LB_SPACE) lbo->indirect = lbo->before; + + /* LB2: Never break at the start of text. + * sot × + */ + if (opportunity == opportunities) { + *opportunity = 0; + continue; + } + + /* LB4: Always break after hard line breaks + * BK ! + */ + if (lbo->before == U_LB_MANDATORY_BREAK) { + *opportunity = 1; + continue; + } + + /* LB5: Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks. + * CR ^ LF + * CR ! + * LF ! + * NL ! + */ + if ((lbo->before == U_LB_CARRIAGE_RETURN) && (lbo->after == U_LB_LINE_FEED)) { + *opportunity = 0; + continue; + } + if ((lbo->before == U_LB_CARRIAGE_RETURN) || + (lbo->before == U_LB_LINE_FEED) || + (lbo->before == U_LB_NEXT_LINE)) { + *opportunity = 1; + continue; + } + + /* LB6: Do not break before hard line breaks. + * ^ ( BK | CR | LF | NL ) + */ + if ((lbo->after == U_LB_MANDATORY_BREAK) || + (lbo->after == U_LB_CARRIAGE_RETURN) || + (lbo->after == U_LB_LINE_FEED) || + (lbo->after == U_LB_NEXT_LINE)) { + *opportunity = 0; + continue; + } + + /* LB7: Do not break before spaces or zero width space. + * ^ SP + * ^ ZW + */ + if ((lbo->after == U_LB_SPACE) || (lbo->after == U_LB_ZWSPACE)) { + *opportunity = 0; + continue; + } + + /* LB8: Break after zero width space. + * ZW _ + */ + if (lbo->before == U_LB_ZWSPACE) { + *opportunity = 1; + continue; + } + + /* LB11: Do not break before or after Word joiner and related characters. + * ^ WJ + * WJ ^ + */ + if ((lbo->before == U_LB_WORD_JOINER) || (lbo->after == U_LB_WORD_JOINER)) { + *opportunity = 0; + continue; + } + + /* LB12: Do not break before or after NBSP and related characters. + * [^SP] ^ GL + * GL ^ + */ + if ((lbo->before != U_LB_SPACE) && (lbo->after == U_LB_GLUE)) { + *opportunity = 0; + continue; + } + if (lbo->before == U_LB_GLUE) { + *opportunity = 0; + continue; + } + + /* LB13: Do not break before ‘]' or ‘!' or ‘;' or ‘/', even after spaces. + * ^ CL + * ^ EX + * ^ IS + * ^ SY + */ + if ((lbo->after == U_LB_CLOSE_PUNCTUATION) || + (lbo->after == U_LB_EXCLAMATION) || + (lbo->after == U_LB_INFIX_NUMERIC) || + (lbo->after == U_LB_BREAK_SYMBOLS)) { + *opportunity = 0; + continue; + } + + /* LB14: Do not break after ‘[', even after spaces. + * OP SP* ^ + */ + if (lbo->indirect == U_LB_OPEN_PUNCTUATION) { + *opportunity = 0; + continue; + } + + /* LB15: Do not break within ‘"[', even with intervening spaces. + * QU SP* ^ OP + */ + if ((lbo->indirect == U_LB_QUOTATION) && (lbo->after == U_LB_OPEN_PUNCTUATION)) { + *opportunity = 0; + continue; + } + + /* LB16: Do not break within ‘]h', even with intervening spaces. + * CL SP* ^ NS + */ + if ((lbo->indirect == U_LB_CLOSE_PUNCTUATION) && (lbo->after == U_LB_NONSTARTER)) { + *opportunity = 0; + continue; + } + + /* LB17: Do not break within ‘ــ', even with intervening spaces. + * B2 SP* ^ B2 + */ + if ((lbo->indirect == U_LB_BREAK_BOTH) && (lbo->after == U_LB_BREAK_BOTH)) { + *opportunity = 0; + continue; + } + + /* LB18: Break after spaces. + * SP _ + */ + if (lbo->before == U_LB_SPACE) { + *opportunity = 1; + continue; + } + + /* LB19: Do not break before or after quotation marks. + * ^ QU + * QU ^ + */ + if ((lbo->before == U_LB_QUOTATION) || (lbo->after == U_LB_QUOTATION)) { + *opportunity = 0; + continue; + } + + /* LB20: Break before and after unresolved. + * _ CB + * CB _ + */ + if ((lbo->after == U_LB_CONTINGENT_BREAK) || (lbo->before == U_LB_CONTINGENT_BREAK)) { + *opportunity = 1; + continue; + } + + /* LB21: Do not break before hyphen-minus, other hyphens, + * fixed-width spaces, small kana, and other non-starters, + * or lbo->after acute accents. + * ^ BA + * ^ HY + * ^ NS + * BB ^ + */ + if ((lbo->after == U_LB_BREAK_AFTER) || + (lbo->after == U_LB_HYPHEN) || + (lbo->after == U_LB_NONSTARTER) || + (lbo->before == U_LB_BREAK_BEFORE)) { + *opportunity = 0; + continue; + } + + /* LB22: Do not break between two ellipses, + * or between letters or numbers and ellipsis. + * AL ^ IN + * ID ^ IN + * IN ^ IN + * NU ^ IN + */ + if ((lbo->after == U_LB_INSEPARABLE) && + ((lbo->before == U_LB_ALPHABETIC) || + (lbo->before == U_LB_IDEOGRAPHIC) || + (lbo->before == U_LB_INSEPARABLE) || + (lbo->before == U_LB_NUMERIC))) { + *opportunity = 0; + continue; + } + + /* LB23: Do not break within ‘a9', ‘3a', or ‘H%'. + * ID ^ PO + * AL ^ NU + * NU ^ AL + */ + if (((lbo->before == U_LB_IDEOGRAPHIC) && (lbo->after == U_LB_POSTFIX_NUMERIC)) || + ((lbo->before == U_LB_ALPHABETIC) && (lbo->after == U_LB_NUMERIC)) || + ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_ALPHABETIC))) { + *opportunity = 0; + continue; + } + + /* LB24: Do not break between prefix and letters or ideographs. + * PR ^ ID + * PR ^ AL + * PO ^ AL + */ + if (((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_IDEOGRAPHIC)) || + ((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_ALPHABETIC)) || + ((lbo->before == U_LB_POSTFIX_NUMERIC) && (lbo->after == U_LB_ALPHABETIC))) { + *opportunity = 0; + continue; + } + + /* LB25: Do not break between the following pairs of classes relevant to numbers: + * CL ^ PO + * CL ^ PR + * NU ^ PO + * NU ^ PR + * PO ^ OP + * PO ^ NU + * PR ^ OP + * PR ^ NU + * HY ^ NU + * IS ^ NU + * NU ^ NU + * SY ^ NU + */ + if (((lbo->before == U_LB_CLOSE_PUNCTUATION) && (lbo->after == U_LB_POSTFIX_NUMERIC)) || + ((lbo->before == U_LB_CLOSE_PUNCTUATION) && (lbo->after == U_LB_PREFIX_NUMERIC)) || + ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_POSTFIX_NUMERIC)) || + ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_PREFIX_NUMERIC)) || + ((lbo->before == U_LB_POSTFIX_NUMERIC) && (lbo->after == U_LB_OPEN_PUNCTUATION)) || + ((lbo->before == U_LB_POSTFIX_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || + ((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_OPEN_PUNCTUATION)) || + ((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || + ((lbo->before == U_LB_HYPHEN) && (lbo->after == U_LB_NUMERIC)) || + ((lbo->before == U_LB_INFIX_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || + ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || + ((lbo->before == U_LB_BREAK_SYMBOLS) && (lbo->after == U_LB_NUMERIC))) { + *opportunity = 0; + continue; + } + + /* LB26: Do not break a Korean syllable. + * JL ^ (JL | JV | H2 | H3) + * (JV | H2) ^ (JV | JT) + * (JT | H3) ^ JT + */ + if ((lbo->before == U_LB_JL) && + ((lbo->after == U_LB_JL) || + (lbo->after == U_LB_JV) || + (lbo->after == U_LB_H2) || + (lbo->after == U_LB_H3))) { + *opportunity = 0; + continue; + } + if (((lbo->before == U_LB_JV) || (lbo->before == U_LB_H2)) && + ((lbo->after == U_LB_JV) || (lbo->after == U_LB_JT))) { + *opportunity = 0; + continue; + } + if (((lbo->before == U_LB_JT) || (lbo->before == U_LB_H3)) && + (lbo->after == U_LB_JT)) { + *opportunity = 0; + continue; + } + + /* LB27: Treat a Korean Syllable Block the same as ID. + * (JL | JV | JT | H2 | H3) ^ IN + * (JL | JV | JT | H2 | H3) ^ PO + * PR ^ (JL | JV | JT | H2 | H3) + */ + if (((lbo->before == U_LB_JL) || (lbo->before == U_LB_JV) || (lbo->before == U_LB_JT) || + (lbo->before == U_LB_H2) || (lbo->before == U_LB_H3)) && + (lbo->after == U_LB_INSEPARABLE)) { + *opportunity = 0; + continue; + } + if (((lbo->before == U_LB_JL) || (lbo->before == U_LB_JV) || (lbo->before == U_LB_JT) || + (lbo->before == U_LB_H2) || (lbo->before == U_LB_H3)) && + (lbo->after == U_LB_POSTFIX_NUMERIC)) { + *opportunity = 0; + continue; + } + if ((lbo->before == U_LB_PREFIX_NUMERIC) && + ((lbo->after == U_LB_JL) || (lbo->after == U_LB_JV) || (lbo->after == U_LB_JT) || + (lbo->after == U_LB_H2) || (lbo->after == U_LB_H3))) { + *opportunity = 0; + continue; + } + + /* LB28: Do not break between alphabetics. + * AL ^ AL + */ + if ((lbo->before == U_LB_ALPHABETIC) && (lbo->after == U_LB_ALPHABETIC)) { + *opportunity = 0; + continue; + } + + /* LB29: Do not break between numeric punctuation and alphabetics. + * IS ^ AL + */ + if ((lbo->before == U_LB_INFIX_NUMERIC) && (lbo->after == U_LB_ALPHABETIC)) { + *opportunity = 0; + continue; + } + + /* LB30: Do not break between letters, numbers, or ordinary symbols + * and opening or closing punctuation. + * (AL | NU) ^ OP + * CL ^ (AL | NU) + */ + if (((lbo->before == U_LB_ALPHABETIC) || (lbo->before == U_LB_NUMERIC)) && + (lbo->after == U_LB_OPEN_PUNCTUATION)) { + *opportunity = 0; + continue; + } + if ((lbo->before == U_LB_CLOSE_PUNCTUATION) && + ((lbo->after == U_LB_ALPHABETIC) || (lbo->after == U_LB_NUMERIC))) { + *opportunity = 0; + continue; + } + + /* Unix options begin with a minus sign. */ + if ((lbo->before == U_LB_HYPHEN) && + (lbo->after != U_LB_SPACE) && + (lbo->previous == U_LB_SPACE)) { + *opportunity = 0; + continue; + } + + /* LB31: Break everywhere else. + * ALL _ + * _ ALL + */ + *opportunity = 1; + } +} + +#else /* HAVE_ICU */ +#include "ascii.h" + +typedef struct { + unsigned int index; + int wasSpace; +} LineBreakOpportunitiesState; + +static void +prepareLineBreakOpportunitiesState (LineBreakOpportunitiesState *lbo) { + lbo->index = 0; + lbo->wasSpace = 0; +} + +static void +findLineBreakOpportunities ( + BrailleContractionData *bcd, + LineBreakOpportunitiesState *lbo, + unsigned char *opportunities, + const wchar_t *characters, unsigned int limit +) { + while (lbo->index <= limit) { + int isSpace = testCharacter(bcd, characters[lbo->index], CTC_Space); + opportunities[lbo->index] = lbo->wasSpace && !isSpace; + + lbo->wasSpace = isSpace; + lbo->index += 1; + } +} +#endif /* HAVE_ICU */ + +static inline ContractionTableHeader * +getContractionTableHeader (BrailleContractionData *bcd) { + return bcd->table->data.internal.header.fields; +} + +static inline const void * +getContractionTableItem (BrailleContractionData *bcd, ContractionTableOffset offset) { + return &bcd->table->data.internal.header.bytes[offset]; +} + +static const ContractionTableCharacter * +getContractionTableCharacter (BrailleContractionData *bcd, wchar_t character) { + const ContractionTableCharacter *characters = getContractionTableItem(bcd, getContractionTableHeader(bcd)->characters); + int first = 0; + int last = getContractionTableHeader(bcd)->characterCount - 1; + + while (first <= last) { + int current = (first + last) / 2; + const ContractionTableCharacter *ctc = &characters[current]; + + if (ctc->value < character) { + first = current + 1; + } else if (ctc->value > character) { + last = current - 1; + } else { + return ctc; + } + } + + return NULL; +} + +typedef struct { + BrailleContractionData *bcd; + CharacterEntry *character; +} SetAlwaysRuleData; + +static int +setAlwaysRule (wchar_t character, void *data) { + SetAlwaysRuleData *sar = data; + const ContractionTableCharacter *ctc = getContractionTableCharacter(sar->bcd, character); + + if (ctc) { + ContractionTableOffset offset = ctc->always; + + if (offset) { + const ContractionTableRule *rule = getContractionTableItem(sar->bcd, offset); + + if (rule->replen) { + sar->character->always = rule; + return 1; + } + } + } + + return 0; +} + +static const ContractionTableRule * +getAlwaysRule (BrailleContractionData *bcd, wchar_t character) { + const CharacterEntry *entry = getCharacterEntry(bcd, character); + + return entry? entry->always: NULL; +} + +static wchar_t +getBestCharacter (BrailleContractionData *bcd, wchar_t character) { + const ContractionTableRule *rule = getAlwaysRule(bcd, character); + + return rule? rule->findrep[0]: 0; +} + +static int +sameCharacters (BrailleContractionData *bcd, wchar_t character1, wchar_t character2) { + wchar_t best1 = getBestCharacter(bcd, character1); + + return best1 && (best1 == getBestCharacter(bcd, character2)); +} + +static wchar_t +toLowerCase (BrailleContractionData *bcd, wchar_t character) { + const CharacterEntry *entry = getCharacterEntry(bcd, character); + return entry? entry->lowercase: character; +} + +static int +checkCurrentRule (BrailleContractionData *bcd, const wchar_t *source) { + const wchar_t *character = bcd->current.rule->findrep; + int count = bcd->current.length; + + while (count) { + if (toLowerCase(bcd, *source) != toLowerCase(bcd, *character)) return 0; + --count, ++source, ++character; + } + return 1; +} + +static void +setBefore (BrailleContractionData *bcd) { + bcd->current.before = (bcd->input.current == bcd->input.begin)? WC_C(' '): bcd->input.current[-1]; +} + +static void +setAfter (BrailleContractionData *bcd, int length) { + bcd->current.after = (bcd->input.current + length < bcd->input.end)? bcd->input.current[length]: WC_C(' '); +} + +static int +isBeginning (BrailleContractionData *bcd) { + const wchar_t *ptr = bcd->input.current; + + while (ptr > bcd->input.begin) { + if (!testCharacter(bcd, *--ptr, CTC_Punctuation)) { + if (!testCharacter(bcd, *ptr, CTC_Space)) return 0; + break; + } + } + + return 1; +} + +static int +isEnding (BrailleContractionData *bcd) { + const wchar_t *ptr = bcd->input.current + bcd->current.length; + + while (ptr < bcd->input.end) { + if (!testCharacter(bcd, *ptr, CTC_Punctuation)) { + if (!testCharacter(bcd, *ptr, CTC_Space)) return 0; + break; + } + + ptr += 1; + } + + return 1; +} + +static int +selectRule (BrailleContractionData *bcd, int length) { + int ruleOffset; + int maximumLength; + + if (length < 1) return 0; + if (length == 1) { + const ContractionTableCharacter *ctc = getContractionTableCharacter(bcd, toLowerCase(bcd, *bcd->input.current)); + if (!ctc) return 0; + ruleOffset = ctc->rules; + maximumLength = 1; + } else { + wchar_t characters[2]; + characters[0] = toLowerCase(bcd, bcd->input.current[0]); + characters[1] = toLowerCase(bcd, bcd->input.current[1]); + ruleOffset = getContractionTableHeader(bcd)->rules[CTH(characters)]; + maximumLength = 0; + } + + while (ruleOffset) { + bcd->current.rule = getContractionTableItem(bcd, ruleOffset); + bcd->current.opcode = bcd->current.rule->opcode; + bcd->current.length = bcd->current.rule->findlen; + + if ((length == 1) || + ((bcd->current.length <= length) && + checkCurrentRule(bcd, bcd->input.current))) { + setAfter(bcd, bcd->current.length); + + if (!maximumLength) { + maximumLength = bcd->current.length; + + if (prefs.capitalizationMode != CTB_CAP_NONE) { + typedef enum {CS_Any, CS_Lower, CS_UpperSingle, CS_UpperMultiple} CapitalizationState; +#define STATE(c) (testCharacter(bcd, (c), CTC_UpperCase)? CS_UpperSingle: testCharacter(bcd, (c), CTC_LowerCase)? CS_Lower: CS_Any) + + CapitalizationState current = STATE(bcd->current.before); + int i; + + for (i=0; icurrent.length; i+=1) { + wchar_t character = bcd->input.current[i]; + CapitalizationState next = STATE(character); + + if (i > 0) { + if (((current == CS_Lower) && (next == CS_UpperSingle)) || + ((current == CS_UpperMultiple) && (next == CS_Lower))) { + maximumLength = i; + break; + } + + if ((prefs.capitalizationMode != CTB_CAP_SIGN) && + (next == CS_UpperSingle)) { + maximumLength = i; + break; + } + } + + if ((prefs.capitalizationMode == CTB_CAP_SIGN) && (current > CS_Lower) && (next == CS_UpperSingle)) { + current = CS_UpperMultiple; + } else if (next != CS_Any) { + current = next; + } else if (current == CS_Any) { + current = CS_Lower; + } + } + +#undef STATE + } + } + + if ((bcd->current.length <= maximumLength) && + (!bcd->current.rule->after || testBefore(bcd, bcd->current.rule->after)) && + (!bcd->current.rule->before || testAfter(bcd, bcd->current.rule->before))) { + switch (bcd->current.opcode) { + case CTO_Always: + case CTO_Repeatable: + case CTO_Literal: + return 1; + + case CTO_LargeSign: + case CTO_LastLargeSign: + if (!isBeginning(bcd) || !isEnding(bcd)) bcd->current.opcode = CTO_Always; + return 1; + + case CTO_WholeWord: + if (testBefore(bcd, CTC_Space|CTC_Punctuation) && + testAfter(bcd, CTC_Space|CTC_Punctuation)) + return 1; + break; + + case CTO_Contraction: + if ((bcd->input.current > bcd->input.begin) && sameCharacters(bcd, bcd->input.current[-1], WC_C('\''))) break; + if (isBeginning(bcd) && isEnding(bcd)) return 1; + break; + + case CTO_LowWord: + if (testBefore(bcd, CTC_Space) && testAfter(bcd, CTC_Space) && + (bcd->previous.opcode != CTO_JoinedWord) && + ((bcd->output.current == bcd->output.begin) || !bcd->output.current[-1])) + return 1; + break; + + case CTO_JoinedWord: + if (testBefore(bcd, CTC_Space|CTC_Punctuation) && + !sameCharacters(bcd, bcd->current.before, WC_C('-')) && + (bcd->output.current + bcd->current.rule->replen < bcd->output.end)) { + const wchar_t *end = bcd->input.current + bcd->current.length; + const wchar_t *ptr = end; + + while (ptr < bcd->input.end) { + if (!testCharacter(bcd, *ptr, CTC_Space)) { + if (!testCharacter(bcd, *ptr, CTC_Letter)) break; + if (ptr == end) break; + return 1; + } + + if (ptr++ == bcd->input.cursor) break; + } + } + break; + + case CTO_SuffixableWord: + if (testBefore(bcd, CTC_Space|CTC_Punctuation) && + testAfter(bcd, CTC_Space|CTC_Letter|CTC_Punctuation)) + return 1; + break; + + case CTO_PrefixableWord: + if (testBefore(bcd, CTC_Space|CTC_Letter|CTC_Punctuation) && + testAfter(bcd, CTC_Space|CTC_Punctuation)) + return 1; + break; + + case CTO_BegWord: + if (testBefore(bcd, CTC_Space|CTC_Punctuation) && + testAfter(bcd, CTC_Letter)) + return 1; + break; + + case CTO_BegMidWord: + if (testBefore(bcd, CTC_Letter|CTC_Space|CTC_Punctuation) && + testAfter(bcd, CTC_Letter)) + return 1; + break; + + case CTO_MidWord: + if (testBefore(bcd, CTC_Letter) && testAfter(bcd, CTC_Letter)) + return 1; + break; + + case CTO_MidEndWord: + if (testBefore(bcd, CTC_Letter) && + testAfter(bcd, CTC_Letter|CTC_Space|CTC_Punctuation)) + return 1; + break; + + case CTO_EndWord: + if (testBefore(bcd, CTC_Letter) && + testAfter(bcd, CTC_Space|CTC_Punctuation)) + return 1; + break; + + case CTO_BegNum: + if (testBefore(bcd, CTC_Space|CTC_Punctuation) && + testAfter(bcd, CTC_Digit)) + return 1; + break; + + case CTO_MidNum: + if (testBefore(bcd, CTC_Digit) && testAfter(bcd, CTC_Digit)) + return 1; + break; + + case CTO_EndNum: + if (testBefore(bcd, CTC_Digit) && + testAfter(bcd, CTC_Space|CTC_Punctuation)) + return 1; + break; + + case CTO_PrePunc: + if (testCurrent(bcd, CTC_Punctuation) && isBeginning(bcd) && !isEnding(bcd)) return 1; + break; + + case CTO_PostPunc: + if (testCurrent(bcd, CTC_Punctuation) && !isBeginning(bcd) && isEnding(bcd)) return 1; + break; + + default: + break; + } + } + } + + ruleOffset = bcd->current.rule->next; + } + + return 0; +} + +static int +putCells (BrailleContractionData *bcd, const BYTE *cells, int count) { + if (bcd->output.current + count > bcd->output.end) return 0; + bcd->output.current = mempcpy(bcd->output.current, cells, count); + return 1; +} + +static int +putCell (BrailleContractionData *bcd, BYTE byte) { + return putCells(bcd, &byte, 1); +} + +static int +putReplace (BrailleContractionData *bcd, const ContractionTableRule *rule, wchar_t character) { + const BYTE *cells = (BYTE *)&rule->findrep[rule->findlen]; + int count = rule->replen; + + if ((prefs.capitalizationMode == CTB_CAP_DOT7) && + testCharacter(bcd, character, CTC_UpperCase)) { + if (!putCell(bcd, *cells++ | BRL_DOT_7)) return 0; + if (!(count -= 1)) return 1; + } + + return putCells(bcd, cells, count); +} + +static int +putCharacter (BrailleContractionData *bcd, wchar_t character) { + { + const ContractionTableRule *rule = getAlwaysRule(bcd, character); + if (rule) return putReplace(bcd, rule, character); + } + + if (isBrailleCharacter(character)) { + return putCell(bcd, (character & UNICODE_CELL_MASK)); + } + + { +#ifdef HAVE_WCHAR_H + const wchar_t replacementCharacter = UNICODE_REPLACEMENT_CHARACTER; + if (getCharacterWidth(character) == 0) return 1; +#else /* HAVE_WCHAR_H */ + const wchar_t replacementCharacter = SUB; +#endif /* HAVE_WCHAR_H */ + + if (replacementCharacter != character) { + const ContractionTableRule *rule = getAlwaysRule(bcd, replacementCharacter); + if (rule) return putReplace(bcd, rule, character); + } + } + + return putCell(bcd, BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6 | BRL_DOT_7 | BRL_DOT_8); +} + +static int +putSequence (BrailleContractionData *bcd, ContractionTableOffset offset) { + const BYTE *sequence = getContractionTableItem(bcd, offset); + return putCells(bcd, sequence+1, *sequence); +} + +static int +contractText_native (BrailleContractionData *bcd) { + const wchar_t *srcword = NULL; + BYTE *destword = NULL; + + const wchar_t *srcjoin = NULL; + BYTE *destjoin = NULL; + + BYTE *destlast = NULL; + const wchar_t *literal = NULL; + + unsigned char lineBreakOpportunities[getInputCount(bcd)]; + LineBreakOpportunitiesState lbo; + + prepareLineBreakOpportunitiesState(&lbo); + bcd->previous.opcode = CTO_None; + + while (bcd->input.current < bcd->input.end) { + int wasLiteral = bcd->input.current == literal; + + destlast = bcd->output.current; + setOffset(bcd); + setBefore(bcd); + + if (literal) + if (bcd->input.current >= literal) + if (testCurrent(bcd, CTC_Space) || testPrevious(bcd, CTC_Space)) + literal = NULL; + + if ((!literal && selectRule(bcd, getInputUnconsumed(bcd))) || selectRule(bcd, 1)) { + if (!literal && + ((bcd->current.opcode == CTO_Literal) || + (prefs.expandCurrentWord && + (bcd->input.cursor >= bcd->input.current) && + (bcd->input.cursor < (bcd->input.current + bcd->current.length))))) { + literal = bcd->input.current + bcd->current.length; + + if (!testCurrent(bcd, CTC_Space)) { + if (destjoin) { + bcd->input.current = srcjoin; + bcd->output.current = destjoin; + } else { + bcd->input.current = bcd->input.begin; + bcd->output.current = bcd->output.begin; + } + } + + continue; + } + + if (getContractionTableHeader(bcd)->numberSign && (bcd->previous.opcode != CTO_MidNum) && + !testBefore(bcd, CTC_Digit) && testCurrent(bcd, CTC_Digit)) { + if (!putSequence(bcd, getContractionTableHeader(bcd)->numberSign)) break; + } else if (getContractionTableHeader(bcd)->englishLetterSign && testCurrent(bcd, CTC_Letter)) { + if ((bcd->current.opcode == CTO_Contraction) || + ((bcd->current.opcode != CTO_EndNum) && testBefore(bcd, CTC_Digit)) || + (testCurrent(bcd, CTC_Letter) && + (bcd->current.opcode == CTO_Always) && + (bcd->current.length == 1) && + testBefore(bcd, CTC_Space) && + (((bcd->input.current + 1) == bcd->input.end) || + testNext(bcd, CTC_Space) || + (testNext(bcd, CTC_Punctuation) && + !sameCharacters(bcd, bcd->input.current[1], WC_C('.')) && + !sameCharacters(bcd, bcd->input.current[1], WC_C('\'')))))) { + if (!putSequence(bcd, getContractionTableHeader(bcd)->englishLetterSign)) break; + } + } + + if (prefs.capitalizationMode == CTB_CAP_SIGN) { + if (testCurrent(bcd, CTC_UpperCase)) { + if (!testBefore(bcd, CTC_UpperCase)) { + if (getContractionTableHeader(bcd)->beginCapitalSign && + (bcd->input.current + 1 < bcd->input.end) && testNext(bcd, CTC_UpperCase)) { + if (!putSequence(bcd, getContractionTableHeader(bcd)->beginCapitalSign)) break; + } else if (getContractionTableHeader(bcd)->capitalSign) { + if (!putSequence(bcd, getContractionTableHeader(bcd)->capitalSign)) break; + } + } + } else if (testCurrent(bcd, CTC_LowerCase)) { + if (getContractionTableHeader(bcd)->endCapitalSign && (bcd->input.current - 2 >= bcd->input.begin) && + testPrevious(bcd, CTC_UpperCase) && testRelative(bcd, -2, CTC_UpperCase)) { + if (!putSequence(bcd, getContractionTableHeader(bcd)->endCapitalSign)) break; + } + } + } + + switch (bcd->current.opcode) { + case CTO_LargeSign: + case CTO_LastLargeSign: + if ((bcd->previous.opcode == CTO_LargeSign) && !wasLiteral) { + while ((bcd->output.current > bcd->output.begin) && !bcd->output.current[-1]) bcd->output.current -= 1; + setOffset(bcd); + + { + BYTE **destptrs[] = {&destword, &destjoin, &destlast, NULL}; + BYTE ***destptr = destptrs; + + while (*destptr) { + if (**destptr && (**destptr > bcd->output.current)) **destptr = bcd->output.current; + destptr += 1; + } + } + } + break; + + default: + break; + } + + if (bcd->current.rule->replen && + !((bcd->current.opcode == CTO_Always) && (bcd->current.length == 1))) { + const wchar_t *srcnxt = bcd->input.current + bcd->current.length; + if (!putReplace(bcd, bcd->current.rule, *bcd->input.current)) goto done; + while (++bcd->input.current != srcnxt) clearOffset(bcd); + } else { + const wchar_t *srclim = bcd->input.current + bcd->current.length; + while (1) { + if (!putCharacter(bcd, *bcd->input.current)) goto done; + if (++bcd->input.current == srclim) break; + setOffset(bcd); + } + } + + { + const wchar_t *srcorig = bcd->input.current; + const wchar_t *srcbeg = NULL; + BYTE *destbeg = NULL; + + switch (bcd->current.opcode) { + case CTO_Repeatable: { + const wchar_t *srclim = bcd->input.end - bcd->current.length; + + srcbeg = bcd->input.current - bcd->current.length; + destbeg = destlast; + + while ((bcd->input.current <= srclim) && checkCurrentRule(bcd, bcd->input.current)) { + const wchar_t *srcnxt = bcd->input.current + bcd->current.length; + + do { + clearOffset(bcd); + } while (++bcd->input.current != srcnxt); + } + + break; + } + + case CTO_JoinedWord: + srcbeg = bcd->input.current; + destbeg = bcd->output.current; + + while ((bcd->input.current < bcd->input.end) && testCurrent(bcd, CTC_Space)) { + clearOffset(bcd); + bcd->input.current += 1; + } + break; + + default: + break; + } + + if (srcbeg && (bcd->input.cursor >= srcbeg) && (bcd->input.cursor < bcd->input.current)) { + int repeat = !literal; + literal = bcd->input.current; + + if (repeat) { + bcd->input.current = srcbeg; + bcd->output.current = destbeg; + continue; + } + + bcd->input.current = srcorig; + } + } + } else { + bcd->current.opcode = CTO_Always; + if (!putCharacter(bcd, *bcd->input.current)) break; + bcd->input.current += 1; + } + + findLineBreakOpportunities(bcd, &lbo, lineBreakOpportunities, bcd->input.begin, getInputConsumed(bcd)); + if (lineBreakOpportunities[getInputConsumed(bcd)]) { + srcjoin = bcd->input.current; + destjoin = bcd->output.current; + + if (bcd->current.opcode != CTO_JoinedWord) { + srcword = bcd->input.current; + destword = bcd->output.current; + } + } + + if ((bcd->output.current == bcd->output.begin) || bcd->output.current[-1]) { + bcd->previous.opcode = bcd->current.opcode; + } + } + +done: + if (bcd->input.current < bcd->input.end) { + if (destword && (destword > bcd->output.begin) && + (!(testPrevious(bcd, CTC_Space) || testCurrent(bcd, CTC_Space)) || + (bcd->previous.opcode == CTO_JoinedWord))) { + bcd->input.current = srcword; + bcd->output.current = destword; + } else if (destlast) { + bcd->output.current = destlast; + } + } + + return 1; +} + +static void +finishCharacterEntry_native (BrailleContractionData *bcd, CharacterEntry *entry) { + wchar_t character = entry->value; + + { + const ContractionTableCharacter *ctc = getContractionTableCharacter(bcd, character); + + if (ctc) entry->attributes |= ctc->attributes; + } + + { + SetAlwaysRuleData sar = { + .bcd = bcd, + .character = entry + }; + + if (!handleBestCharacter(character, setAlwaysRule, &sar)) { + entry->always = NULL; + } + } +} + +static const ContractionTableTranslationMethods nativeTranslationMethods = { + .contractText = contractText_native, + .finishCharacterEntry = finishCharacterEntry_native +}; + +const ContractionTableTranslationMethods * +getContractionTableTranslationMethods_native (void) { + return &nativeTranslationMethods; +} diff --git a/Programs/ctb_translate.c b/Programs/ctb_translate.c index 50d8e25a..af1d98b5 100644 --- a/Programs/ctb_translate.c +++ b/Programs/ctb_translate.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -19,1021 +19,15 @@ #include "prologue.h" #include -#include -#ifdef HAVE_ICU -#include -#include -#endif /* HAVE_ICU */ - -#include "ctb.h" -#include "ctb_internal.h" +#include "log.h" +#include "ctb_translate.h" #include "ttb.h" #include "prefs.h" -#include "unicode.h" -#include "charset.h" -#include "ascii.h" -#include "brl_dots.h" -#include "log.h" -#include "file.h" -#include "parse.h" - -typedef struct { - ContractionTable *const table; - - struct { - const wchar_t *begin; - const wchar_t *end; - const wchar_t *current; - const wchar_t *cursor; - int *offsets; - } input; - - struct { - BYTE *begin; - BYTE *end; - BYTE *current; - } output; - - struct { - const ContractionTableRule *rule; - ContractionTableOpcode opcode; - int length; - - wchar_t before; - wchar_t after; - } current; - - struct { - ContractionTableOpcode opcode; - } previous; -} BrailleContractionData; - -static inline unsigned int -getInputCount (BrailleContractionData *bcd) { - return bcd->input.end - bcd->input.begin; -} - -static inline unsigned int -getInputConsumed (BrailleContractionData *bcd) { - return bcd->input.current - bcd->input.begin; -} - -static inline unsigned int -getInputUnconsumed (BrailleContractionData *bcd) { - return bcd->input.end - bcd->input.current; -} - -static inline unsigned int -getOutputCount (BrailleContractionData *bcd) { - return bcd->output.end - bcd->output.begin; -} - -static inline unsigned int -getOutputConsumed (BrailleContractionData *bcd) { - return bcd->output.current - bcd->output.begin; -} - -static inline void -assignOffset (BrailleContractionData *bcd, size_t value) { - if (bcd->input.offsets) bcd->input.offsets[getInputConsumed(bcd)] = value; -} - -static inline void -setOffset (BrailleContractionData *bcd) { - assignOffset(bcd, getOutputConsumed(bcd)); -} - -static inline void -clearOffset (BrailleContractionData *bcd) { - assignOffset(bcd, CTB_NO_OFFSET); -} - -static inline ContractionTableHeader * -getContractionTableHeader (BrailleContractionData *bcd) { - return bcd->table->data.internal.header.fields; -} - -static inline const void * -getContractionTableItem (BrailleContractionData *bcd, ContractionTableOffset offset) { - return &bcd->table->data.internal.header.bytes[offset]; -} - -static const ContractionTableCharacter * -getContractionTableCharacter (BrailleContractionData *bcd, wchar_t character) { - const ContractionTableCharacter *characters = getContractionTableItem(bcd, getContractionTableHeader(bcd)->characters); - int first = 0; - int last = getContractionTableHeader(bcd)->characterCount - 1; - - while (first <= last) { - int current = (first + last) / 2; - const ContractionTableCharacter *ctc = &characters[current]; - - if (ctc->value < character) { - first = current + 1; - } else if (ctc->value > character) { - last = current - 1; - } else { - return ctc; - } - } - - return NULL; -} - -typedef struct { - BrailleContractionData *bcd; - CharacterEntry *character; -} SetAlwaysRuleData; - -static int -setAlwaysRule (wchar_t character, void *data) { - SetAlwaysRuleData *sar = data; - const ContractionTableCharacter *ctc = getContractionTableCharacter(sar->bcd, character); - - if (ctc) { - ContractionTableOffset offset = ctc->always; - - if (offset) { - const ContractionTableRule *rule = getContractionTableItem(sar->bcd, offset); - - if (rule->replen) { - sar->character->always = rule; - return 1; - } - } - } - - return 0; -} - -static CharacterEntry * -getCharacterEntry (BrailleContractionData *bcd, wchar_t character) { - int first = 0; - int last = bcd->table->characters.count - 1; - - while (first <= last) { - int current = (first + last) / 2; - CharacterEntry *entry = &bcd->table->characters.array[current]; - - if (entry->value < character) { - first = current + 1; - } else if (entry->value > character) { - last = current - 1; - } else { - return entry; - } - } - - if (bcd->table->characters.count == bcd->table->characters.size) { - int newSize = bcd->table->characters.size; - newSize = newSize? newSize<<1: 0X80; - - { - CharacterEntry *newArray = realloc(bcd->table->characters.array, (newSize * sizeof(*newArray))); - - if (!newArray) { - logMallocError(); - return NULL; - } - - bcd->table->characters.array = newArray; - bcd->table->characters.size = newSize; - } - } - - memmove(&bcd->table->characters.array[first+1], - &bcd->table->characters.array[first], - (bcd->table->characters.count - first) * sizeof(*bcd->table->characters.array)); - bcd->table->characters.count += 1; - - { - CharacterEntry *entry = &bcd->table->characters.array[first]; - memset(entry, 0, sizeof(*entry)); - entry->value = entry->uppercase = entry->lowercase = character; - - if (iswspace(character)) { - entry->attributes |= CTC_Space; - } else if (iswalpha(character)) { - entry->attributes |= CTC_Letter; - - if (iswupper(character)) { - entry->attributes |= CTC_UpperCase; - entry->lowercase = towlower(character); - } - - if (iswlower(character)) { - entry->attributes |= CTC_LowerCase; - entry->uppercase = towupper(character); - } - } else if (iswdigit(character)) { - entry->attributes |= CTC_Digit; - } else if (iswpunct(character)) { - entry->attributes |= CTC_Punctuation; - } - - if (!bcd->table->command) { - { - const ContractionTableCharacter *ctc = getContractionTableCharacter(bcd, character); - - if (ctc) entry->attributes |= ctc->attributes; - } - - { - SetAlwaysRuleData sar = { - .bcd = bcd, - .character = entry - }; - - if (!handleBestCharacter(character, setAlwaysRule, &sar)) { - entry->always = NULL; - } - } - } - - return entry; - } -} - -static const ContractionTableRule * -getAlwaysRule (BrailleContractionData *bcd, wchar_t character) { - const CharacterEntry *entry = getCharacterEntry(bcd, character); - - return entry? entry->always: NULL; -} - -static wchar_t -getBestCharacter (BrailleContractionData *bcd, wchar_t character) { - const ContractionTableRule *rule = getAlwaysRule(bcd, character); - - return rule? rule->findrep[0]: 0; -} - -static int -sameCharacters (BrailleContractionData *bcd, wchar_t character1, wchar_t character2) { - wchar_t best1 = getBestCharacter(bcd, character1); - - return best1 && (best1 == getBestCharacter(bcd, character2)); -} - -static int -testCharacter (BrailleContractionData *bcd, wchar_t character, ContractionTableCharacterAttributes attributes) { - const CharacterEntry *entry = getCharacterEntry(bcd, character); - return entry && (attributes & entry->attributes); -} - -static inline int -testRelative (BrailleContractionData *bcd, int offset, ContractionTableCharacterAttributes attributes) { - return testCharacter(bcd, bcd->input.current[offset], attributes); -} - -static inline int -testCurrent (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { - return testRelative(bcd, 0, attributes); -} - -static inline int -testPrevious (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { - return testRelative(bcd, -1, attributes); -} - -static inline int -testNext (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { - return testRelative(bcd, 1, attributes); -} - -static inline int -testBefore (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { - return testCharacter(bcd, bcd->current.before, attributes); -} - -static inline int -testAfter (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { - return testCharacter(bcd, bcd->current.after, attributes); -} - -static wchar_t -toLowerCase (BrailleContractionData *bcd, wchar_t character) { - const CharacterEntry *entry = getCharacterEntry(bcd, character); - return entry? entry->lowercase: character; -} - -static int -checkCurrentRule (BrailleContractionData *bcd, const wchar_t *source) { - const wchar_t *character = bcd->current.rule->findrep; - int count = bcd->current.length; - - while (count) { - if (toLowerCase(bcd, *source) != toLowerCase(bcd, *character)) return 0; - --count, ++source, ++character; - } - return 1; -} - -static void -setBefore (BrailleContractionData *bcd) { - bcd->current.before = (bcd->input.current == bcd->input.begin)? WC_C(' '): bcd->input.current[-1]; -} - -static void -setAfter (BrailleContractionData *bcd, int length) { - bcd->current.after = (bcd->input.current + length < bcd->input.end)? bcd->input.current[length]: WC_C(' '); -} - -static int -isBeginning (BrailleContractionData *bcd) { - const wchar_t *ptr = bcd->input.current; - - while (ptr > bcd->input.begin) { - if (!testCharacter(bcd, *--ptr, CTC_Punctuation)) { - if (!testCharacter(bcd, *ptr, CTC_Space)) return 0; - break; - } - } - - return 1; -} - -static int -isEnding (BrailleContractionData *bcd) { - const wchar_t *ptr = bcd->input.current + bcd->current.length; - - while (ptr < bcd->input.end) { - if (!testCharacter(bcd, *ptr, CTC_Punctuation)) { - if (!testCharacter(bcd, *ptr, CTC_Space)) return 0; - break; - } - - ptr += 1; - } - - return 1; -} - -static int -selectRule (BrailleContractionData *bcd, int length) { - int ruleOffset; - int maximumLength; - - if (length < 1) return 0; - if (length == 1) { - const ContractionTableCharacter *ctc = getContractionTableCharacter(bcd, toLowerCase(bcd, *bcd->input.current)); - if (!ctc) return 0; - ruleOffset = ctc->rules; - maximumLength = 1; - } else { - wchar_t characters[2]; - characters[0] = toLowerCase(bcd, bcd->input.current[0]); - characters[1] = toLowerCase(bcd, bcd->input.current[1]); - ruleOffset = getContractionTableHeader(bcd)->rules[CTH(characters)]; - maximumLength = 0; - } - - while (ruleOffset) { - bcd->current.rule = getContractionTableItem(bcd, ruleOffset); - bcd->current.opcode = bcd->current.rule->opcode; - bcd->current.length = bcd->current.rule->findlen; - - if ((length == 1) || - ((bcd->current.length <= length) && - checkCurrentRule(bcd, bcd->input.current))) { - setAfter(bcd, bcd->current.length); - - if (!maximumLength) { - maximumLength = bcd->current.length; - - if (prefs.capitalizationMode != CTB_CAP_NONE) { - typedef enum {CS_Any, CS_Lower, CS_UpperSingle, CS_UpperMultiple} CapitalizationState; -#define STATE(c) (testCharacter(bcd, (c), CTC_UpperCase)? CS_UpperSingle: testCharacter(bcd, (c), CTC_LowerCase)? CS_Lower: CS_Any) - - CapitalizationState current = STATE(bcd->current.before); - int i; - - for (i=0; icurrent.length; i+=1) { - wchar_t character = bcd->input.current[i]; - CapitalizationState next = STATE(character); - - if (i > 0) { - if (((current == CS_Lower) && (next == CS_UpperSingle)) || - ((current == CS_UpperMultiple) && (next == CS_Lower))) { - maximumLength = i; - break; - } - - if ((prefs.capitalizationMode != CTB_CAP_SIGN) && - (next == CS_UpperSingle)) { - maximumLength = i; - break; - } - } - - if ((prefs.capitalizationMode == CTB_CAP_SIGN) && (current > CS_Lower) && (next == CS_UpperSingle)) { - current = CS_UpperMultiple; - } else if (next != CS_Any) { - current = next; - } else if (current == CS_Any) { - current = CS_Lower; - } - } - -#undef STATE - } - } - - if ((bcd->current.length <= maximumLength) && - (!bcd->current.rule->after || testBefore(bcd, bcd->current.rule->after)) && - (!bcd->current.rule->before || testAfter(bcd, bcd->current.rule->before))) { - switch (bcd->current.opcode) { - case CTO_Always: - case CTO_Repeatable: - case CTO_Literal: - return 1; - - case CTO_LargeSign: - case CTO_LastLargeSign: - if (!isBeginning(bcd) || !isEnding(bcd)) bcd->current.opcode = CTO_Always; - return 1; - - case CTO_WholeWord: - if (testBefore(bcd, CTC_Space|CTC_Punctuation) && - testAfter(bcd, CTC_Space|CTC_Punctuation)) - return 1; - break; - - case CTO_Contraction: - if ((bcd->input.current > bcd->input.begin) && sameCharacters(bcd, bcd->input.current[-1], WC_C('\''))) break; - if (isBeginning(bcd) && isEnding(bcd)) return 1; - break; - - case CTO_LowWord: - if (testBefore(bcd, CTC_Space) && testAfter(bcd, CTC_Space) && - (bcd->previous.opcode != CTO_JoinedWord) && - ((bcd->output.current == bcd->output.begin) || !bcd->output.current[-1])) - return 1; - break; - - case CTO_JoinedWord: - if (testBefore(bcd, CTC_Space|CTC_Punctuation) && - !sameCharacters(bcd, bcd->current.before, WC_C('-')) && - (bcd->output.current + bcd->current.rule->replen < bcd->output.end)) { - const wchar_t *end = bcd->input.current + bcd->current.length; - const wchar_t *ptr = end; - - while (ptr < bcd->input.end) { - if (!testCharacter(bcd, *ptr, CTC_Space)) { - if (!testCharacter(bcd, *ptr, CTC_Letter)) break; - if (ptr == end) break; - return 1; - } - - if (ptr++ == bcd->input.cursor) break; - } - } - break; - - case CTO_SuffixableWord: - if (testBefore(bcd, CTC_Space|CTC_Punctuation) && - testAfter(bcd, CTC_Space|CTC_Letter|CTC_Punctuation)) - return 1; - break; - - case CTO_PrefixableWord: - if (testBefore(bcd, CTC_Space|CTC_Letter|CTC_Punctuation) && - testAfter(bcd, CTC_Space|CTC_Punctuation)) - return 1; - break; - - case CTO_BegWord: - if (testBefore(bcd, CTC_Space|CTC_Punctuation) && - testAfter(bcd, CTC_Letter)) - return 1; - break; - - case CTO_BegMidWord: - if (testBefore(bcd, CTC_Letter|CTC_Space|CTC_Punctuation) && - testAfter(bcd, CTC_Letter)) - return 1; - break; - - case CTO_MidWord: - if (testBefore(bcd, CTC_Letter) && testAfter(bcd, CTC_Letter)) - return 1; - break; - - case CTO_MidEndWord: - if (testBefore(bcd, CTC_Letter) && - testAfter(bcd, CTC_Letter|CTC_Space|CTC_Punctuation)) - return 1; - break; - - case CTO_EndWord: - if (testBefore(bcd, CTC_Letter) && - testAfter(bcd, CTC_Space|CTC_Punctuation)) - return 1; - break; - - case CTO_BegNum: - if (testBefore(bcd, CTC_Space|CTC_Punctuation) && - testAfter(bcd, CTC_Digit)) - return 1; - break; - - case CTO_MidNum: - if (testBefore(bcd, CTC_Digit) && testAfter(bcd, CTC_Digit)) - return 1; - break; - - case CTO_EndNum: - if (testBefore(bcd, CTC_Digit) && - testAfter(bcd, CTC_Space|CTC_Punctuation)) - return 1; - break; - - case CTO_PrePunc: - if (testCurrent(bcd, CTC_Punctuation) && isBeginning(bcd) && !isEnding(bcd)) return 1; - break; - - case CTO_PostPunc: - if (testCurrent(bcd, CTC_Punctuation) && !isBeginning(bcd) && isEnding(bcd)) return 1; - break; - - default: - break; - } - } - } - - ruleOffset = bcd->current.rule->next; - } - - return 0; -} - -static int -putCells (BrailleContractionData *bcd, const BYTE *cells, int count) { - if (bcd->output.current + count > bcd->output.end) return 0; - bcd->output.current = mempcpy(bcd->output.current, cells, count); - return 1; -} - -static int -putCell (BrailleContractionData *bcd, BYTE byte) { - return putCells(bcd, &byte, 1); -} - -static int -putReplace (BrailleContractionData *bcd, const ContractionTableRule *rule, wchar_t character) { - const BYTE *cells = (BYTE *)&rule->findrep[rule->findlen]; - int count = rule->replen; - - if ((prefs.capitalizationMode == CTB_CAP_DOT7) && - testCharacter(bcd, character, CTC_UpperCase)) { - if (!putCell(bcd, *cells++ | BRL_DOT_7)) return 0; - if (!(count -= 1)) return 1; - } - - return putCells(bcd, cells, count); -} - -static int -putCharacter (BrailleContractionData *bcd, wchar_t character) { - { - const ContractionTableRule *rule = getAlwaysRule(bcd, character); - if (rule) return putReplace(bcd, rule, character); - } - - if (isBrailleCharacter(character)) { - return putCell(bcd, (character & UNICODE_CELL_MASK)); - } - - { -#ifdef HAVE_WCHAR_H - const wchar_t replacementCharacter = UNICODE_REPLACEMENT_CHARACTER; - if (getCharacterWidth(character) == 0) return 1; -#else /* HAVE_WCHAR_H */ - const wchar_t replacementCharacter = SUB; -#endif /* HAVE_WCHAR_H */ - - if (replacementCharacter != character) { - const ContractionTableRule *rule = getAlwaysRule(bcd, replacementCharacter); - if (rule) return putReplace(bcd, rule, character); - } - } - - return putCell(bcd, BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6 | BRL_DOT_7 | BRL_DOT_8); -} - -static int -putSequence (BrailleContractionData *bcd, ContractionTableOffset offset) { - const BYTE *sequence = getContractionTableItem(bcd, offset); - return putCells(bcd, sequence+1, *sequence); -} #ifdef HAVE_ICU -typedef struct { - unsigned int index; - ULineBreak after; - ULineBreak before; - ULineBreak previous; - ULineBreak indirect; -} LineBreakOpportunitiesState; - -static void -prepareLineBreakOpportunitiesState (LineBreakOpportunitiesState *lbo) { - lbo->index = 0; - lbo->after = U_LB_SPACE; - lbo->before = lbo->after; - lbo->previous = lbo->before; - lbo->indirect = U_LB_SPACE; -} - -static void -findLineBreakOpportunities ( - BrailleContractionData *bcd, - LineBreakOpportunitiesState *lbo, - unsigned char *opportunities, - const wchar_t *characters, unsigned int limit -) { - /* UAX #14: Line Breaking Properties - * http://unicode.org/reports/tr14/ - * Section 6: Line Breaking Algorithm - * - * ! Mandatory break at the indicated position - * ^ No break allowed at the indicated position - * _ Break allowed at the indicated position - * - * H ideographs - * h small kana - * 9 digits - */ - - while (lbo->index <= limit) { - unsigned char *opportunity = &opportunities[lbo->index]; - - lbo->previous = lbo->before; - lbo->before = lbo->after; - lbo->after = u_getIntPropertyValue(characters[lbo->index], UCHAR_LINE_BREAK); - lbo->index += 1; - - /* LB9 Do not break a combining character sequence. - */ - if (lbo->after == U_LB_COMBINING_MARK) { - /* LB10: Treat any remaining combining mark as AL. - */ - if ((lbo->before == U_LB_MANDATORY_BREAK) || - (lbo->before == U_LB_CARRIAGE_RETURN) || - (lbo->before == U_LB_LINE_FEED) || - (lbo->before == U_LB_NEXT_LINE) || - (lbo->before == U_LB_SPACE) || - (lbo->before == U_LB_ZWSPACE)) { - lbo->before = U_LB_ALPHABETIC; - } - - /* treat it as if it has the line breaking class of the base character - */ - lbo->after = lbo->before; - *opportunity = 0; - continue; - } - - if (lbo->before != U_LB_SPACE) lbo->indirect = lbo->before; - - /* LB2: Never break at the start of text. - * sot × - */ - if (opportunity == opportunities) { - *opportunity = 0; - continue; - } - - /* LB4: Always break after hard line breaks - * BK ! - */ - if (lbo->before == U_LB_MANDATORY_BREAK) { - *opportunity = 1; - continue; - } - - /* LB5: Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks. - * CR ^ LF - * CR ! - * LF ! - * NL ! - */ - if ((lbo->before == U_LB_CARRIAGE_RETURN) && (lbo->after == U_LB_LINE_FEED)) { - *opportunity = 0; - continue; - } - if ((lbo->before == U_LB_CARRIAGE_RETURN) || - (lbo->before == U_LB_LINE_FEED) || - (lbo->before == U_LB_NEXT_LINE)) { - *opportunity = 1; - continue; - } - - /* LB6: Do not break before hard line breaks. - * ^ ( BK | CR | LF | NL ) - */ - if ((lbo->after == U_LB_MANDATORY_BREAK) || - (lbo->after == U_LB_CARRIAGE_RETURN) || - (lbo->after == U_LB_LINE_FEED) || - (lbo->after == U_LB_NEXT_LINE)) { - *opportunity = 0; - continue; - } - - /* LB7: Do not break before spaces or zero width space. - * ^ SP - * ^ ZW - */ - if ((lbo->after == U_LB_SPACE) || (lbo->after == U_LB_ZWSPACE)) { - *opportunity = 0; - continue; - } - - /* LB8: Break after zero width space. - * ZW _ - */ - if (lbo->before == U_LB_ZWSPACE) { - *opportunity = 1; - continue; - } - - /* LB11: Do not break before or after Word joiner and related characters. - * ^ WJ - * WJ ^ - */ - if ((lbo->before == U_LB_WORD_JOINER) || (lbo->after == U_LB_WORD_JOINER)) { - *opportunity = 0; - continue; - } - - /* LB12: Do not break before or after NBSP and related characters. - * [^SP] ^ GL - * GL ^ - */ - if ((lbo->before != U_LB_SPACE) && (lbo->after == U_LB_GLUE)) { - *opportunity = 0; - continue; - } - if (lbo->before == U_LB_GLUE) { - *opportunity = 0; - continue; - } - - /* LB13: Do not break before ‘]' or ‘!' or ‘;' or ‘/', even after spaces. - * ^ CL - * ^ EX - * ^ IS - * ^ SY - */ - if ((lbo->after == U_LB_CLOSE_PUNCTUATION) || - (lbo->after == U_LB_EXCLAMATION) || - (lbo->after == U_LB_INFIX_NUMERIC) || - (lbo->after == U_LB_BREAK_SYMBOLS)) { - *opportunity = 0; - continue; - } - - /* LB14: Do not break after ‘[', even after spaces. - * OP SP* ^ - */ - if (lbo->indirect == U_LB_OPEN_PUNCTUATION) { - *opportunity = 0; - continue; - } - - /* LB15: Do not break within ‘"[', even with intervening spaces. - * QU SP* ^ OP - */ - if ((lbo->indirect == U_LB_QUOTATION) && (lbo->after == U_LB_OPEN_PUNCTUATION)) { - *opportunity = 0; - continue; - } - - /* LB16: Do not break within ‘]h', even with intervening spaces. - * CL SP* ^ NS - */ - if ((lbo->indirect == U_LB_CLOSE_PUNCTUATION) && (lbo->after == U_LB_NONSTARTER)) { - *opportunity = 0; - continue; - } - - /* LB17: Do not break within ‘ــ', even with intervening spaces. - * B2 SP* ^ B2 - */ - if ((lbo->indirect == U_LB_BREAK_BOTH) && (lbo->after == U_LB_BREAK_BOTH)) { - *opportunity = 0; - continue; - } - - /* LB18: Break after spaces. - * SP _ - */ - if (lbo->before == U_LB_SPACE) { - *opportunity = 1; - continue; - } - - /* LB19: Do not break before or after quotation marks. - * ^ QU - * QU ^ - */ - if ((lbo->before == U_LB_QUOTATION) || (lbo->after == U_LB_QUOTATION)) { - *opportunity = 0; - continue; - } - - /* LB20: Break before and after unresolved. - * _ CB - * CB _ - */ - if ((lbo->after == U_LB_CONTINGENT_BREAK) || (lbo->before == U_LB_CONTINGENT_BREAK)) { - *opportunity = 1; - continue; - } - - /* LB21: Do not break before hyphen-minus, other hyphens, - * fixed-width spaces, small kana, and other non-starters, - * or lbo->after acute accents. - * ^ BA - * ^ HY - * ^ NS - * BB ^ - */ - if ((lbo->after == U_LB_BREAK_AFTER) || - (lbo->after == U_LB_HYPHEN) || - (lbo->after == U_LB_NONSTARTER) || - (lbo->before == U_LB_BREAK_BEFORE)) { - *opportunity = 0; - continue; - } - - /* LB22: Do not break between two ellipses, - * or between letters or numbers and ellipsis. - * AL ^ IN - * ID ^ IN - * IN ^ IN - * NU ^ IN - */ - if ((lbo->after == U_LB_INSEPARABLE) && - ((lbo->before == U_LB_ALPHABETIC) || - (lbo->before == U_LB_IDEOGRAPHIC) || - (lbo->before == U_LB_INSEPARABLE) || - (lbo->before == U_LB_NUMERIC))) { - *opportunity = 0; - continue; - } - - /* LB23: Do not break within ‘a9', ‘3a', or ‘H%'. - * ID ^ PO - * AL ^ NU - * NU ^ AL - */ - if (((lbo->before == U_LB_IDEOGRAPHIC) && (lbo->after == U_LB_POSTFIX_NUMERIC)) || - ((lbo->before == U_LB_ALPHABETIC) && (lbo->after == U_LB_NUMERIC)) || - ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_ALPHABETIC))) { - *opportunity = 0; - continue; - } - - /* LB24: Do not break between prefix and letters or ideographs. - * PR ^ ID - * PR ^ AL - * PO ^ AL - */ - if (((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_IDEOGRAPHIC)) || - ((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_ALPHABETIC)) || - ((lbo->before == U_LB_POSTFIX_NUMERIC) && (lbo->after == U_LB_ALPHABETIC))) { - *opportunity = 0; - continue; - } - - /* LB25: Do not break between the following pairs of classes relevant to numbers: - * CL ^ PO - * CL ^ PR - * NU ^ PO - * NU ^ PR - * PO ^ OP - * PO ^ NU - * PR ^ OP - * PR ^ NU - * HY ^ NU - * IS ^ NU - * NU ^ NU - * SY ^ NU - */ - if (((lbo->before == U_LB_CLOSE_PUNCTUATION) && (lbo->after == U_LB_POSTFIX_NUMERIC)) || - ((lbo->before == U_LB_CLOSE_PUNCTUATION) && (lbo->after == U_LB_PREFIX_NUMERIC)) || - ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_POSTFIX_NUMERIC)) || - ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_PREFIX_NUMERIC)) || - ((lbo->before == U_LB_POSTFIX_NUMERIC) && (lbo->after == U_LB_OPEN_PUNCTUATION)) || - ((lbo->before == U_LB_POSTFIX_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || - ((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_OPEN_PUNCTUATION)) || - ((lbo->before == U_LB_PREFIX_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || - ((lbo->before == U_LB_HYPHEN) && (lbo->after == U_LB_NUMERIC)) || - ((lbo->before == U_LB_INFIX_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || - ((lbo->before == U_LB_NUMERIC) && (lbo->after == U_LB_NUMERIC)) || - ((lbo->before == U_LB_BREAK_SYMBOLS) && (lbo->after == U_LB_NUMERIC))) { - *opportunity = 0; - continue; - } - - /* LB26: Do not break a Korean syllable. - * JL ^ (JL | JV | H2 | H3) - * (JV | H2) ^ (JV | JT) - * (JT | H3) ^ JT - */ - if ((lbo->before == U_LB_JL) && - ((lbo->after == U_LB_JL) || - (lbo->after == U_LB_JV) || - (lbo->after == U_LB_H2) || - (lbo->after == U_LB_H3))) { - *opportunity = 0; - continue; - } - if (((lbo->before == U_LB_JV) || (lbo->before == U_LB_H2)) && - ((lbo->after == U_LB_JV) || (lbo->after == U_LB_JT))) { - *opportunity = 0; - continue; - } - if (((lbo->before == U_LB_JT) || (lbo->before == U_LB_H3)) && - (lbo->after == U_LB_JT)) { - *opportunity = 0; - continue; - } - - /* LB27: Treat a Korean Syllable Block the same as ID. - * (JL | JV | JT | H2 | H3) ^ IN - * (JL | JV | JT | H2 | H3) ^ PO - * PR ^ (JL | JV | JT | H2 | H3) - */ - if (((lbo->before == U_LB_JL) || (lbo->before == U_LB_JV) || (lbo->before == U_LB_JT) || - (lbo->before == U_LB_H2) || (lbo->before == U_LB_H3)) && - (lbo->after == U_LB_INSEPARABLE)) { - *opportunity = 0; - continue; - } - if (((lbo->before == U_LB_JL) || (lbo->before == U_LB_JV) || (lbo->before == U_LB_JT) || - (lbo->before == U_LB_H2) || (lbo->before == U_LB_H3)) && - (lbo->after == U_LB_POSTFIX_NUMERIC)) { - *opportunity = 0; - continue; - } - if ((lbo->before == U_LB_PREFIX_NUMERIC) && - ((lbo->after == U_LB_JL) || (lbo->after == U_LB_JV) || (lbo->after == U_LB_JT) || - (lbo->after == U_LB_H2) || (lbo->after == U_LB_H3))) { - *opportunity = 0; - continue; - } - - /* LB28: Do not break between alphabetics. - * AL ^ AL - */ - if ((lbo->before == U_LB_ALPHABETIC) && (lbo->after == U_LB_ALPHABETIC)) { - *opportunity = 0; - continue; - } - - /* LB29: Do not break between numeric punctuation and alphabetics. - * IS ^ AL - */ - if ((lbo->before == U_LB_INFIX_NUMERIC) && (lbo->after == U_LB_ALPHABETIC)) { - *opportunity = 0; - continue; - } - - /* LB30: Do not break between letters, numbers, or ordinary symbols - * and opening or closing punctuation. - * (AL | NU) ^ OP - * CL ^ (AL | NU) - */ - if (((lbo->before == U_LB_ALPHABETIC) || (lbo->before == U_LB_NUMERIC)) && - (lbo->after == U_LB_OPEN_PUNCTUATION)) { - *opportunity = 0; - continue; - } - if ((lbo->before == U_LB_CLOSE_PUNCTUATION) && - ((lbo->after == U_LB_ALPHABETIC) || (lbo->after == U_LB_NUMERIC))) { - *opportunity = 0; - continue; - } - - /* Unix options begin with a minus sign. */ - if ((lbo->before == U_LB_HYPHEN) && - (lbo->after != U_LB_SPACE) && - (lbo->previous == U_LB_SPACE)) { - *opportunity = 0; - continue; - } - - /* LB31: Break everywhere else. - * ALL _ - * _ ALL - */ - *opportunity = 1; - } -} +#include +#include static int nextBaseCharacter (const UChar **current, const UChar *end) { @@ -1104,33 +98,6 @@ normalizeText ( } #else /* HAVE_ICU */ -typedef struct { - unsigned int index; - int wasSpace; -} LineBreakOpportunitiesState; - -static void -prepareLineBreakOpportunitiesState (LineBreakOpportunitiesState *lbo) { - lbo->index = 0; - lbo->wasSpace = 0; -} - -static void -findLineBreakOpportunities ( - BrailleContractionData *bcd, - LineBreakOpportunitiesState *lbo, - unsigned char *opportunities, - const wchar_t *characters, unsigned int limit -) { - while (lbo->index <= limit) { - int isSpace = testCharacter(bcd, characters[lbo->index], CTC_Space); - opportunities[lbo->index] = lbo->wasSpace && !isSpace; - - lbo->wasSpace = isSpace; - lbo->index += 1; - } -} - static int normalizeText ( BrailleContractionData *bcd, @@ -1142,533 +109,74 @@ normalizeText ( } #endif /* HAVE_ICU */ -static int -contractTextInternally (BrailleContractionData *bcd) { - const wchar_t *srcword = NULL; - BYTE *destword = NULL; - - const wchar_t *srcjoin = NULL; - BYTE *destjoin = NULL; - - BYTE *destlast = NULL; - const wchar_t *literal = NULL; - - unsigned char lineBreakOpportunities[getInputCount(bcd)]; - LineBreakOpportunitiesState lbo; - - prepareLineBreakOpportunitiesState(&lbo); - bcd->previous.opcode = CTO_None; - - while (bcd->input.current < bcd->input.end) { - int wasLiteral = bcd->input.current == literal; - - destlast = bcd->output.current; - setOffset(bcd); - setBefore(bcd); - - if (literal) - if (bcd->input.current >= literal) - if (testCurrent(bcd, CTC_Space) || testPrevious(bcd, CTC_Space)) - literal = NULL; - - if ((!literal && selectRule(bcd, getInputUnconsumed(bcd))) || selectRule(bcd, 1)) { - if (!literal && - ((bcd->current.opcode == CTO_Literal) || - (prefs.expandCurrentWord && - (bcd->input.cursor >= bcd->input.current) && - (bcd->input.cursor < (bcd->input.current + bcd->current.length))))) { - literal = bcd->input.current + bcd->current.length; - - if (!testCurrent(bcd, CTC_Space)) { - if (destjoin) { - bcd->input.current = srcjoin; - bcd->output.current = destjoin; - } else { - bcd->input.current = bcd->input.begin; - bcd->output.current = bcd->output.begin; - } - } - - continue; - } - - if (getContractionTableHeader(bcd)->numberSign && (bcd->previous.opcode != CTO_MidNum) && - !testBefore(bcd, CTC_Digit) && testCurrent(bcd, CTC_Digit)) { - if (!putSequence(bcd, getContractionTableHeader(bcd)->numberSign)) break; - } else if (getContractionTableHeader(bcd)->englishLetterSign && testCurrent(bcd, CTC_Letter)) { - if ((bcd->current.opcode == CTO_Contraction) || - ((bcd->current.opcode != CTO_EndNum) && testBefore(bcd, CTC_Digit)) || - (testCurrent(bcd, CTC_Letter) && - (bcd->current.opcode == CTO_Always) && - (bcd->current.length == 1) && - testBefore(bcd, CTC_Space) && - (((bcd->input.current + 1) == bcd->input.end) || - testNext(bcd, CTC_Space) || - (testNext(bcd, CTC_Punctuation) && - !sameCharacters(bcd, bcd->input.current[1], WC_C('.')) && - !sameCharacters(bcd, bcd->input.current[1], WC_C('\'')))))) { - if (!putSequence(bcd, getContractionTableHeader(bcd)->englishLetterSign)) break; - } - } - - if (prefs.capitalizationMode == CTB_CAP_SIGN) { - if (testCurrent(bcd, CTC_UpperCase)) { - if (!testBefore(bcd, CTC_UpperCase)) { - if (getContractionTableHeader(bcd)->beginCapitalSign && - (bcd->input.current + 1 < bcd->input.end) && testNext(bcd, CTC_UpperCase)) { - if (!putSequence(bcd, getContractionTableHeader(bcd)->beginCapitalSign)) break; - } else if (getContractionTableHeader(bcd)->capitalSign) { - if (!putSequence(bcd, getContractionTableHeader(bcd)->capitalSign)) break; - } - } - } else if (testCurrent(bcd, CTC_LowerCase)) { - if (getContractionTableHeader(bcd)->endCapitalSign && (bcd->input.current - 2 >= bcd->input.begin) && - testPrevious(bcd, CTC_UpperCase) && testRelative(bcd, -2, CTC_UpperCase)) { - if (!putSequence(bcd, getContractionTableHeader(bcd)->endCapitalSign)) break; - } - } - } - - switch (bcd->current.opcode) { - case CTO_LargeSign: - case CTO_LastLargeSign: - if ((bcd->previous.opcode == CTO_LargeSign) && !wasLiteral) { - while ((bcd->output.current > bcd->output.begin) && !bcd->output.current[-1]) bcd->output.current -= 1; - setOffset(bcd); - - { - BYTE **destptrs[] = {&destword, &destjoin, &destlast, NULL}; - BYTE ***destptr = destptrs; - - while (*destptr) { - if (**destptr && (**destptr > bcd->output.current)) **destptr = bcd->output.current; - destptr += 1; - } - } - } - break; - - default: - break; - } - - if (bcd->current.rule->replen && - !((bcd->current.opcode == CTO_Always) && (bcd->current.length == 1))) { - const wchar_t *srcnxt = bcd->input.current + bcd->current.length; - if (!putReplace(bcd, bcd->current.rule, *bcd->input.current)) goto done; - while (++bcd->input.current != srcnxt) clearOffset(bcd); - } else { - const wchar_t *srclim = bcd->input.current + bcd->current.length; - while (1) { - if (!putCharacter(bcd, *bcd->input.current)) goto done; - if (++bcd->input.current == srclim) break; - setOffset(bcd); - } - } - - { - const wchar_t *srcorig = bcd->input.current; - const wchar_t *srcbeg = NULL; - BYTE *destbeg = NULL; - - switch (bcd->current.opcode) { - case CTO_Repeatable: { - const wchar_t *srclim = bcd->input.end - bcd->current.length; - - srcbeg = bcd->input.current - bcd->current.length; - destbeg = destlast; - - while ((bcd->input.current <= srclim) && checkCurrentRule(bcd, bcd->input.current)) { - const wchar_t *srcnxt = bcd->input.current + bcd->current.length; - - do { - clearOffset(bcd); - } while (++bcd->input.current != srcnxt); - } - - break; - } - - case CTO_JoinedWord: - srcbeg = bcd->input.current; - destbeg = bcd->output.current; - - while ((bcd->input.current < bcd->input.end) && testCurrent(bcd, CTC_Space)) { - clearOffset(bcd); - bcd->input.current += 1; - } - break; - - default: - break; - } - - if (srcbeg && (bcd->input.cursor >= srcbeg) && (bcd->input.cursor < bcd->input.current)) { - int repeat = !literal; - literal = bcd->input.current; +CharacterEntry * +getCharacterEntry (BrailleContractionData *bcd, wchar_t character) { + int first = 0; + int last = bcd->table->characters.count - 1; - if (repeat) { - bcd->input.current = srcbeg; - bcd->output.current = destbeg; - continue; - } + while (first <= last) { + int current = (first + last) / 2; + CharacterEntry *entry = &bcd->table->characters.array[current]; - bcd->input.current = srcorig; - } - } + if (entry->value < character) { + first = current + 1; + } else if (entry->value > character) { + last = current - 1; } else { - bcd->current.opcode = CTO_Always; - if (!putCharacter(bcd, *bcd->input.current)) break; - bcd->input.current += 1; - } - - findLineBreakOpportunities(bcd, &lbo, lineBreakOpportunities, bcd->input.begin, getInputConsumed(bcd)); - if (lineBreakOpportunities[getInputConsumed(bcd)]) { - srcjoin = bcd->input.current; - destjoin = bcd->output.current; - - if (bcd->current.opcode != CTO_JoinedWord) { - srcword = bcd->input.current; - destword = bcd->output.current; - } - } - - if ((bcd->output.current == bcd->output.begin) || bcd->output.current[-1]) { - bcd->previous.opcode = bcd->current.opcode; - } - } - -done: - if (bcd->input.current < bcd->input.end) { - if (destword && (destword > bcd->output.begin) && - (!(testPrevious(bcd, CTC_Space) || testCurrent(bcd, CTC_Space)) || - (bcd->previous.opcode == CTO_JoinedWord))) { - bcd->input.current = srcword; - bcd->output.current = destword; - } else if (destlast) { - bcd->output.current = destlast; + return entry; } } - return 1; -} - -static int -putExternalRequests (BrailleContractionData *bcd) { - typedef enum { - REQ_TEXT, - REQ_NUMBER - } ExternalRequestType; - - typedef struct { - const char *name; - ExternalRequestType type; - - union { - struct { - const wchar_t *start; - size_t count; - } text; - - unsigned int number; - } value; - } ExternalRequestEntry; - - const ExternalRequestEntry externalRequestTable[] = { - { .name = "cursor-position", - .type = REQ_NUMBER, - .value.number = bcd->input.cursor? bcd->input.cursor-bcd->input.begin+1: 0 - }, - - { .name = "expand-current-word", - .type = REQ_NUMBER, - .value.number = prefs.expandCurrentWord - }, - - { .name = "capitalization-mode", - .type = REQ_NUMBER, - .value.number = prefs.capitalizationMode - }, - - { .name = "maximum-length", - .type = REQ_NUMBER, - .value.number = getOutputCount(bcd) - }, - - { .name = "text", - .type = REQ_TEXT, - .value.text = { - .start = bcd->input.begin, - .count = getInputCount(bcd) - } - }, - - { .name = NULL } - }; - - FILE *stream = bcd->table->data.external.standardInput; - const ExternalRequestEntry *req = externalRequestTable; - - while (req->name) { - if (fputs(req->name, stream) == EOF) goto outputError; - if (fputc('=', stream) == EOF) goto outputError; - - switch (req->type) { - case REQ_TEXT: { - const wchar_t *character = req->value.text.start; - const wchar_t *end = character + req->value.text.count; - - while (character < end) { - Utf8Buffer utf8; - size_t utfs = convertWcharToUtf8(*character++, utf8); + if (bcd->table->characters.count == bcd->table->characters.size) { + int newSize = bcd->table->characters.size; + newSize = newSize? newSize<<1: 0X80; - if (!utfs) return 0; - if (fputs(utf8, stream) == EOF) goto outputError; - } + { + CharacterEntry *newArray = realloc(bcd->table->characters.array, (newSize * sizeof(*newArray))); - break; + if (!newArray) { + logMallocError(); + return NULL; } - case REQ_NUMBER: - if (fprintf(stream, "%u", req->value.number) == EOF) goto outputError; - break; - - default: - logMessage(LOG_WARNING, "unimplemented external contraction request property type: %s: %u (%s)", bcd->table->command, req->type, req->name); - return 0; - } - - if (fputc('\n', stream) == EOF) goto outputError; - req += 1; - } - - if (fflush(stream) == EOF) goto outputError; - return 1; - -outputError: - logMessage(LOG_WARNING, "external contraction output error: %s: %s", bcd->table->command, strerror(errno)); - return 0; -} - -static const unsigned char brfTable[0X40] = { - /* 0X20 */ 0, - /* 0X21 ! */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, - /* 0X22 " */ BRL_DOT_5, - /* 0X23 # */ BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, - /* 0X24 $ */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_6, - /* 0X25 % */ BRL_DOT_1 | BRL_DOT_4 | BRL_DOT_6, - /* 0X26 & */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, - /* 0X27 ' */ BRL_DOT_3, - /* 0X28 ( */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, - /* 0X29 ) */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, - /* 0X2A * */ BRL_DOT_1 | BRL_DOT_6, - /* 0X2B + */ BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, - /* 0X2C , */ BRL_DOT_6, - /* 0X2D - */ BRL_DOT_3 | BRL_DOT_6, - /* 0X2E . */ BRL_DOT_4 | BRL_DOT_6, - /* 0X2F / */ BRL_DOT_3 | BRL_DOT_4, - /* 0X30 0 */ BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, - /* 0X31 1 */ BRL_DOT_2, - /* 0X32 2 */ BRL_DOT_2 | BRL_DOT_3, - /* 0X33 3 */ BRL_DOT_2 | BRL_DOT_5, - /* 0X34 4 */ BRL_DOT_2 | BRL_DOT_5 | BRL_DOT_6, - /* 0X35 5 */ BRL_DOT_2 | BRL_DOT_6, - /* 0X36 6 */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5, - /* 0X37 7 */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, - /* 0X38 8 */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_6, - /* 0X39 9 */ BRL_DOT_3 | BRL_DOT_5, - /* 0X3A : */ BRL_DOT_1 | BRL_DOT_5 | BRL_DOT_6, - /* 0X3B ; */ BRL_DOT_5 | BRL_DOT_6, - /* 0X3C < */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_6, - /* 0X3D = */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, - /* 0X3E > */ BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, - /* 0X3F ? */ BRL_DOT_1 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, - /* 0X40 @ */ BRL_DOT_4, - /* 0X41 A */ BRL_DOT_1, - /* 0X42 B */ BRL_DOT_1 | BRL_DOT_2, - /* 0X43 C */ BRL_DOT_1 | BRL_DOT_4, - /* 0X44 D */ BRL_DOT_1 | BRL_DOT_4 | BRL_DOT_5, - /* 0X45 E */ BRL_DOT_1 | BRL_DOT_5, - /* 0X46 F */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4, - /* 0X47 G */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5, - /* 0X48 H */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_5, - /* 0X49 I */ BRL_DOT_2 | BRL_DOT_4, - /* 0X4A J */ BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5, - /* 0X4B K */ BRL_DOT_1 | BRL_DOT_3, - /* 0X4C L */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3, - /* 0X4D M */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4, - /* 0X4E N */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, - /* 0X4F O */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_5, - /* 0X50 P */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4, - /* 0X51 Q */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, - /* 0X52 R */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_5, - /* 0X53 S */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4, - /* 0X54 T */ BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5, - /* 0X55 U */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_6, - /* 0X56 V */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_3 | BRL_DOT_6, - /* 0X57 W */ BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, - /* 0X58 X */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_6, - /* 0X59 Y */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, - /* 0X5A Z */ BRL_DOT_1 | BRL_DOT_3 | BRL_DOT_5 | BRL_DOT_6, - /* 0X5B [ */ BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_6, - /* 0X5C \ */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_5 | BRL_DOT_6, - /* 0X5D ] */ BRL_DOT_1 | BRL_DOT_2 | BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6, - /* 0X5E ^ */ BRL_DOT_4 | BRL_DOT_5, - /* 0X5F _ */ BRL_DOT_4 | BRL_DOT_5 | BRL_DOT_6 -}; - -static int -handleExternalResponse_brf (BrailleContractionData *bcd, const char *value) { - int useDot7 = prefs.capitalizationMode == CTB_CAP_DOT7; - - while (*value && (bcd->output.current < bcd->output.end)) { - unsigned char brf = *value++ & 0XFF; - unsigned char dots = 0; - unsigned char superimpose = 0; - - if ((brf >= 0X60) && (brf <= 0X7F)) { - brf -= 0X20; - } else if ((brf >= 0X41) && (brf <= 0X5A)) { - if (useDot7) superimpose |= BRL_DOT_7; + bcd->table->characters.array = newArray; + bcd->table->characters.size = newSize; } - - if ((brf >= 0X20) && (brf <= 0X5F)) dots = brfTable[brf - 0X20] | superimpose; - *bcd->output.current++ = dots; } - return 1; -} - -static int -handleExternalResponse_consumedLength (BrailleContractionData *bcd, const char *value) { - int length; - - if (!isInteger(&length, value)) return 0; - if (length < 1) return 0; - if (length > getInputCount(bcd)) return 0; - - bcd->input.current = bcd->input.begin + length; - return 1; -} - -static int -handleExternalResponse_outputOffsets (BrailleContractionData *bcd, const char *value) { - if (bcd->input.offsets) { - int previous = CTB_NO_OFFSET; - unsigned int count = getInputCount(bcd); - unsigned int index = 0; - - while (*value && (index < count)) { - int offset; - - { - char *delimiter = strchr(value, ','); + memmove(&bcd->table->characters.array[first+1], + &bcd->table->characters.array[first], + (bcd->table->characters.count - first) * sizeof(*bcd->table->characters.array)); + bcd->table->characters.count += 1; - if (delimiter) { - int ok; + { + CharacterEntry *entry = &bcd->table->characters.array[first]; + memset(entry, 0, sizeof(*entry)); + entry->value = entry->uppercase = entry->lowercase = character; - { - char oldDelimiter = *delimiter; - *delimiter = 0; - ok = isInteger(&offset, value); - *delimiter = oldDelimiter; - } + if (iswspace(character)) { + entry->attributes |= CTC_Space; + } else if (iswalpha(character)) { + entry->attributes |= CTC_Letter; - if (!ok) return 0; - value = delimiter + 1; - } else if (isInteger(&offset, value)) { - value += strlen(value); - } else { - return 0; - } + if (iswupper(character)) { + entry->attributes |= CTC_UpperCase; + entry->lowercase = towlower(character); } - if (offset < ((index == 0)? 0: previous)) return 0; - if (offset >= getOutputCount(bcd)) return 0; - - bcd->input.offsets[index++] = (offset == previous)? CTB_NO_OFFSET: offset; - previous = offset; - } - } - - return 1; -} - -typedef struct { - const char *name; - int (*handler) (BrailleContractionData *bcd, const char *value); - unsigned stop:1; -} ExternalResponseEntry; - -static const ExternalResponseEntry externalResponseTable[] = { - { .name = "brf", - .stop = 1, - .handler = handleExternalResponse_brf - }, - - { .name = "consumed-length", - .handler = handleExternalResponse_consumedLength - }, - - { .name = "output-offsets", - .handler = handleExternalResponse_outputOffsets - }, - - { .name = NULL } -}; - -static int -getExternalResponses (BrailleContractionData *bcd) { - FILE *stream = bcd->table->data.external.standardOutput; - - while (readLine(stream, &bcd->table->data.external.input.buffer, &bcd->table->data.external.input.size)) { - int ok = 0; - int stop = 0; - char *delimiter = strchr(bcd->table->data.external.input.buffer, '='); - - if (delimiter) { - const char *value = delimiter + 1; - const ExternalResponseEntry *rsp = externalResponseTable; - - char oldDelimiter = *delimiter; - *delimiter = 0; - - while (rsp->name) { - if (strcmp(bcd->table->data.external.input.buffer, rsp->name) == 0) { - if (rsp->handler(bcd, value)) ok = 1; - if (rsp->stop) stop = 1; - break; - } - - rsp += 1; + if (iswlower(character)) { + entry->attributes |= CTC_LowerCase; + entry->uppercase = towupper(character); } - - *delimiter = oldDelimiter; + } else if (iswdigit(character)) { + entry->attributes |= CTC_Digit; + } else if (iswpunct(character)) { + entry->attributes |= CTC_Punctuation; } - if (!ok) logMessage(LOG_WARNING, "unexpected external contraction response: %s: %s", bcd->table->command, bcd->table->data.external.input.buffer); - if (stop) return 1; - } - - logMessage(LOG_WARNING, "incomplete external contraction response: %s", bcd->table->command); - return 0; -} - -static int -contractTextExternally (BrailleContractionData *bcd) { - setOffset(bcd); - while (++bcd->input.current < bcd->input.end) clearOffset(bcd); - - if (startContractionCommand(bcd->table)) { - if (putExternalRequests(bcd)) { - if (getExternalResponses(bcd)) { - return 1; - } - } + bcd->table->translationMethods->finishCharacterEntry(bcd, entry); + return entry; } - - stopContractionCommand(bcd->table); - return 0; } static inline int @@ -1815,7 +323,6 @@ contractText ( int contracted; { - int (*const contract) (BrailleContractionData *bcd) = bcd.table->command? contractTextExternally: contractTextInternally; const size_t size = getInputCount(&bcd); wchar_t buffer[size]; unsigned int map[size + 1]; @@ -1843,7 +350,7 @@ contractText ( } } - contracted = contract(&bcd); + contracted = contractionTable->translationMethods->contractText(&bcd); if (bcd.input.offsets) { size_t mapIndex = length; @@ -1866,7 +373,7 @@ contractText ( bcd.input.current = bcd.input.begin + map[bcd.input.current - buffer]; bcd.input.end = oldEnd; } else { - contracted = contract(&bcd); + contracted = contractionTable->translationMethods->contractText(&bcd); } } diff --git a/Programs/ctb_translate.h b/Programs/ctb_translate.h new file mode 100644 index 00000000..6f5cecac --- /dev/null +++ b/Programs/ctb_translate.h @@ -0,0 +1,148 @@ +/* + * BRLTTY - A background process providing access to the console screen (when in + * text mode) for a blind person using a refreshable braille display. + * + * Copyright (C) 1995-2018 by The BRLTTY Developers. + * + * BRLTTY comes with ABSOLUTELY NO WARRANTY. + * + * This is free software, placed under the terms of the + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. + * + * Web Page: http://brltty.com/ + * + * This software is maintained by Dave Mielke . + */ + +#ifndef BRLTTY_INCLUDED_CTB_TRANSLATE +#define BRLTTY_INCLUDED_CTB_TRANSLATE + +#include "ctb.h" +#include "ctb_internal.h" +#include "prefs.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +typedef struct { + ContractionTable *const table; + + struct { + const wchar_t *begin; + const wchar_t *end; + const wchar_t *current; + const wchar_t *cursor; + int *offsets; + } input; + + struct { + BYTE *begin; + BYTE *end; + BYTE *current; + } output; + + struct { + const ContractionTableRule *rule; + ContractionTableOpcode opcode; + int length; + + wchar_t before; + wchar_t after; + } current; + + struct { + ContractionTableOpcode opcode; + } previous; +} BrailleContractionData; + +struct ContractionTableTranslationMethodsStruct { + int (*contractText) (BrailleContractionData *bcd); + void (*finishCharacterEntry) (BrailleContractionData *bcd, CharacterEntry *entry); +}; + +static inline unsigned int +getInputCount (BrailleContractionData *bcd) { + return bcd->input.end - bcd->input.begin; +} + +static inline unsigned int +getInputConsumed (BrailleContractionData *bcd) { + return bcd->input.current - bcd->input.begin; +} + +static inline unsigned int +getInputUnconsumed (BrailleContractionData *bcd) { + return bcd->input.end - bcd->input.current; +} + +static inline unsigned int +getOutputCount (BrailleContractionData *bcd) { + return bcd->output.end - bcd->output.begin; +} + +static inline unsigned int +getOutputConsumed (BrailleContractionData *bcd) { + return bcd->output.current - bcd->output.begin; +} + +static inline void +assignOffset (BrailleContractionData *bcd, size_t value) { + if (bcd->input.offsets) bcd->input.offsets[getInputConsumed(bcd)] = value; +} + +static inline void +setOffset (BrailleContractionData *bcd) { + assignOffset(bcd, getOutputConsumed(bcd)); +} + +static inline void +clearOffset (BrailleContractionData *bcd) { + assignOffset(bcd, CTB_NO_OFFSET); +} + +extern CharacterEntry *getCharacterEntry (BrailleContractionData *bcd, wchar_t character); + +static inline int +testCharacter (BrailleContractionData *bcd, wchar_t character, ContractionTableCharacterAttributes attributes) { + const CharacterEntry *entry = getCharacterEntry(bcd, character); + return entry && (attributes & entry->attributes); +} + +static inline int +testRelative (BrailleContractionData *bcd, int offset, ContractionTableCharacterAttributes attributes) { + return testCharacter(bcd, bcd->input.current[offset], attributes); +} + +static inline int +testCurrent (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { + return testRelative(bcd, 0, attributes); +} + +static inline int +testPrevious (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { + return testRelative(bcd, -1, attributes); +} + +static inline int +testNext (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { + return testRelative(bcd, 1, attributes); +} + +static inline int +testBefore (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { + return testCharacter(bcd, bcd->current.before, attributes); +} + +static inline int +testAfter (BrailleContractionData *bcd, ContractionTableCharacterAttributes attributes) { + return testCharacter(bcd, bcd->current.after, attributes); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* BRLTTY_INCLUDED_CTB_TRANSLATE */ diff --git a/Programs/dataarea.c b/Programs/dataarea.c index 25f6f1da..8abe94e4 100644 --- a/Programs/dataarea.c +++ b/Programs/dataarea.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/datafile.c b/Programs/datafile.c index f0ca77ec..e70deb50 100644 --- a/Programs/datafile.c +++ b/Programs/datafile.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/defaults.h b/Programs/defaults.h index b7fa0c2d..da0764cc 100644 --- a/Programs/defaults.h +++ b/Programs/defaults.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -65,14 +65,16 @@ extern "C" { #define DEFAULT_CAPITALS_VISIBLE_TIME 60 /* for blinking caps */ #define DEFAULT_CAPITALS_INVISIBLE_TIME 20 -#define DEFAULT_SKIP_IDENTICAL_LINES 0 /* 1 = skip all identical lines after first */ -#define DEFAULT_SKIP_BLANK_BRAILLE_WINDOWS 0 /* 1 = skip blank windows */ +#define DEFAULT_WORD_WRAP 0 +#define DEFAULT_SKIP_IDENTICAL_LINES 0 +#define DEFAULT_SKIP_BLANK_BRAILLE_WINDOWS 0 #define DEFAULT_SKIP_BLANK_BRAILLE_WINDOWS_MODE sbwEndOfLine -#define DEFAULT_SLIDING_BRAILLE_WINDOW 0 /* 1 for on, 0 for off */ +#define DEFAULT_SLIDING_BRAILLE_WINDOW 0 #define DEFAULT_EAGER_SLIDING_BRAILLE_WINDOW 0 #define DEFAULT_BRAILLE_WINDOW_OVERLAP 0 #define DEFAULT_CURSOR_TRACKING_DELAY ctd250ms +#define DEFAULT_TRACK_SCREEN_SCROLL 0 /* 1 for on, 0 for off */ #define DEFAULT_TRACK_SCREEN_POINTER 0 /* 1 for on, 0 for off */ #define DEFAULT_HIGHLIGHT_BRAILLE_WINDOW_LOCATION 0 /* 1 for on, 0 for off */ diff --git a/Programs/device.c b/Programs/device.c index e998fc80..2eb30da6 100644 --- a/Programs/device.c +++ b/Programs/device.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -167,31 +167,6 @@ resolveDeviceName (const char *const *names, const char *description) { return device; } -int -isQualifiedDevice (const char **identifier, const char *qualifier) { - const char *delimiter = strchr(*identifier, PARAMETER_QUALIFIER_CHARACTER); - - if (delimiter) { - size_t count = delimiter - *identifier; - - if (!qualifier) return 1; - - if (count) { - if (strncasecmp(*identifier, qualifier, count) == 0) { - *identifier += count + 1; - return 1; - } - } - } - - return 0; -} - -int -isUnqualifiedDevice (const char *identifier) { - return !isQualifiedDevice(&identifier, NULL); -} - char ** getDeviceParameters (const char *const *names, const char *identifier) { char parameters[strlen(names[0]) + 1 + strlen(identifier) + 1]; diff --git a/Programs/driver.c b/Programs/driver.c index 09d179f8..21e7b0b6 100644 --- a/Programs/driver.c +++ b/Programs/driver.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -22,8 +22,8 @@ #include "driver.h" void -unsupportedDevice (const char *identifier) { - logMessage(LOG_WARNING, "unsupported device: %s", identifier); +unsupportedDeviceIdentifier (const char *identifier) { + logMessage(LOG_WARNING, "unsupported device identifier: %s", identifier); } void diff --git a/Programs/drivers.c b/Programs/drivers.c index 5cfa600a..ee854478 100644 --- a/Programs/drivers.c +++ b/Programs/drivers.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/dynld_dlfcn.c b/Programs/dynld_dlfcn.c index 774ff2d1..934ecdc5 100644 --- a/Programs/dynld_dlfcn.c +++ b/Programs/dynld_dlfcn.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/dynld_dyld.c b/Programs/dynld_dyld.c index daa7ac12..344c42d8 100644 --- a/Programs/dynld_dyld.c +++ b/Programs/dynld_dyld.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/dynld_grub.c b/Programs/dynld_grub.c index 612eaa2a..66acf591 100644 --- a/Programs/dynld_grub.c +++ b/Programs/dynld_grub.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/dynld_none.c b/Programs/dynld_none.c index 69ff2dd9..9fa658cc 100644 --- a/Programs/dynld_none.c +++ b/Programs/dynld_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/dynld_shl.c b/Programs/dynld_shl.c index 799c857f..e4a858f5 100644 --- a/Programs/dynld_shl.c +++ b/Programs/dynld_shl.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/dynld_windows.c b/Programs/dynld_windows.c index a9a9de2e..2ee8542c 100644 --- a/Programs/dynld_windows.c +++ b/Programs/dynld_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/file.c b/Programs/file.c index c57d00cd..14fa3a8a 100644 --- a/Programs/file.c +++ b/Programs/file.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -42,7 +42,7 @@ int isPathDelimiter (const char character) { - return character == '/'; + return character == FILE_PATH_DELIMITER; } int @@ -203,7 +203,7 @@ ensureFileExtension (const char *path, const char *extension) { int count = 0; strings[count++] = path; - if (!locatePathExtension(path)) strings[count++] = extension; + if (extension && !locatePathExtension(path)) strings[count++] = extension; return joinStrings(strings, count); } diff --git a/Programs/fm_adlib.c b/Programs/fm_adlib.c index c5c30a87..3bf3a533 100644 --- a/Programs/fm_adlib.c +++ b/Programs/fm_adlib.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/fm_none.c b/Programs/fm_none.c index 421b55f8..e8162ac0 100644 --- a/Programs/fm_none.c +++ b/Programs/fm_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/gio.c b/Programs/gio.c index 3ff294c1..94252bff 100644 --- a/Programs/gio.c +++ b/Programs/gio.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -575,7 +575,7 @@ gioNewHandleInputObject ( } } - if (asyncSetAlarmIn(&hio->pollAlarm, 0, handleInputAlarm, hio)) { + if (asyncNewRelativeAlarm(&hio->pollAlarm, 0, handleInputAlarm, hio)) { if (asyncResetAlarmEvery(hio->pollAlarm, pollInterval)) { return hio; } diff --git a/Programs/gio_bluetooth.c b/Programs/gio_bluetooth.c index 1cd83e6e..442ed798 100644 --- a/Programs/gio_bluetooth.c +++ b/Programs/gio_bluetooth.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -92,7 +92,7 @@ isBluetoothSupported (const GioDescriptor *descriptor) { static int testBluetoothIdentifier (const char **identifier) { - return isBluetoothDevice(identifier); + return isBluetoothDeviceIdentifier(identifier); } static const GioOptions * diff --git a/Programs/gio_internal.h b/Programs/gio_internal.h index 9004e821..fcdf48b6 100644 --- a/Programs/gio_internal.h +++ b/Programs/gio_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/gio_null.c b/Programs/gio_null.c index ac4cb934..1f192370 100644 --- a/Programs/gio_null.c +++ b/Programs/gio_null.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -23,7 +23,7 @@ #include "log.h" #include "io_generic.h" #include "gio_internal.h" -#include "device.h" +#include "parse.h" struct GioHandleStruct { int place_holder; @@ -69,7 +69,7 @@ isNullSupported (const GioDescriptor *descriptor) { static int testNullIdentifier (const char **identifier) { - return isQualifiedDevice(identifier, "null"); + return hasQualifier(identifier, "null"); } static const GioOptions * diff --git a/Programs/gio_serial.c b/Programs/gio_serial.c index e52a2996..e9f039da 100644 --- a/Programs/gio_serial.c +++ b/Programs/gio_serial.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -95,7 +95,7 @@ isSerialSupported (const GioDescriptor *descriptor) { static int testSerialIdentifier (const char **identifier) { - return isSerialDevice(identifier); + return isSerialDeviceIdentifier(identifier); } static const GioOptions * diff --git a/Programs/gio_usb.c b/Programs/gio_usb.c index 927cfdd3..bf10d908 100644 --- a/Programs/gio_usb.c +++ b/Programs/gio_usb.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -289,7 +289,7 @@ isUsbSupported (const GioDescriptor *descriptor) { static int testUsbIdentifier (const char **identifier) { - return isUsbDevice(identifier); + return isUsbDeviceIdentifier(identifier); } static const GioOptions * diff --git a/Programs/hidkeys.c b/Programs/hidkeys.c index f3842ff1..1bcf2afc 100644 --- a/Programs/hidkeys.c +++ b/Programs/hidkeys.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hidkeys.h b/Programs/hidkeys.h index e7360d61..e9767a3a 100644 --- a/Programs/hidkeys.h +++ b/Programs/hidkeys.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd.c b/Programs/hostcmd.c index bfc7a8eb..e8a5a0ea 100644 --- a/Programs/hostcmd.c +++ b/Programs/hostcmd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd_internal.h b/Programs/hostcmd_internal.h index 04fb1a90..105d74bb 100644 --- a/Programs/hostcmd_internal.h +++ b/Programs/hostcmd_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd_none.c b/Programs/hostcmd_none.c index 36a0ee74..497d64b8 100644 --- a/Programs/hostcmd_none.c +++ b/Programs/hostcmd_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd_none.h b/Programs/hostcmd_none.h index a76fad23..e9f88057 100644 --- a/Programs/hostcmd_none.h +++ b/Programs/hostcmd_none.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd_unix.c b/Programs/hostcmd_unix.c index 1d7f9737..88c6fb7b 100644 --- a/Programs/hostcmd_unix.c +++ b/Programs/hostcmd_unix.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd_unix.h b/Programs/hostcmd_unix.h index 4e575128..658119d6 100644 --- a/Programs/hostcmd_unix.h +++ b/Programs/hostcmd_unix.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd_windows.c b/Programs/hostcmd_windows.c index 93883312..8dd9412e 100644 --- a/Programs/hostcmd_windows.c +++ b/Programs/hostcmd_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/hostcmd_windows.h b/Programs/hostcmd_windows.h index e570c275..33048667 100644 --- a/Programs/hostcmd_windows.h +++ b/Programs/hostcmd_windows.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/io_misc.c b/Programs/io_misc.c index eb9a5364..f6c79e82 100644 --- a/Programs/io_misc.c +++ b/Programs/io_misc.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/kbd.c b/Programs/kbd.c index 1078997c..cece72e9 100644 --- a/Programs/kbd.c +++ b/Programs/kbd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/kbd.h b/Programs/kbd.h index 123e525a..22eb5ada 100644 --- a/Programs/kbd.h +++ b/Programs/kbd.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/kbd_android.c b/Programs/kbd_android.c index a72106e6..e1cb82cc 100644 --- a/Programs/kbd_android.c +++ b/Programs/kbd_android.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/kbd_android.h b/Programs/kbd_android.h index afb06781..fb79e518 100644 --- a/Programs/kbd_android.h +++ b/Programs/kbd_android.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/kbd_internal.h b/Programs/kbd_internal.h index 10fb70fd..1e6d385b 100644 --- a/Programs/kbd_internal.h +++ b/Programs/kbd_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/kbd_keycodes.c b/Programs/kbd_keycodes.c index 9f8bb42c..aa8a0344 100644 --- a/Programs/kbd_keycodes.c +++ b/Programs/kbd_keycodes.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/kbd_linux.c b/Programs/kbd_linux.c index 4d629284..7c23fabe 100644 --- a/Programs/kbd_linux.c +++ b/Programs/kbd_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -880,9 +880,9 @@ ASYNC_INPUT_CALLBACK(handleKobjectUeventString) { snprintf(path, sizeof(path), "/dev/input/event%d", event); if ((kio->kix->device.path = strdup(path))) { - if (asyncSetAlarmIn(&kio->kix->udevDelay, - LINUX_INPUT_DEVICE_OPEN_DELAY, - openLinuxInputDevice, kio)) { + if (asyncNewRelativeAlarm(&kio->kix->udevDelay, + LINUX_INPUT_DEVICE_OPEN_DELAY, + openLinuxInputDevice, kio)) { break; } } else { diff --git a/Programs/kbd_none.c b/Programs/kbd_none.c index 43a03114..a7208b37 100644 --- a/Programs/kbd_none.c +++ b/Programs/kbd_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_audit.c b/Programs/ktb_audit.c index bedbce4d..f6654fae 100644 --- a/Programs/ktb_audit.c +++ b/Programs/ktb_audit.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_cmds.c b/Programs/ktb_cmds.c index 8f6a7a37..242f1dfc 100644 --- a/Programs/ktb_cmds.c +++ b/Programs/ktb_cmds.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_compile.c b/Programs/ktb_compile.c index 48571ff4..eb64d115 100644 --- a/Programs/ktb_compile.c +++ b/Programs/ktb_compile.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -1031,6 +1031,83 @@ static DATA_OPERANDS_PROCESSOR(processIfNotKeyOperands) { return processKeyTestOperands(file, 0, data); } +static DATA_CONDITION_TESTER(testPlatformName) { + static const wchar_t *const platforms[] = { +#ifdef __ANDROID__ + WS_C("android"), +#endif /* __ANDROID__ */ + +#ifdef __APPLE__ + WS_C("apple"), +#endif /* __APPLE__ */ + +#ifdef __CYGWIN__ + WS_C("cygwin"), +#endif /* __CYGWIN__ */ + +#ifdef __MSDOS__ + WS_C("dos"), +#endif /* __MSDOS__ */ + +#ifdef GRUB_RUNTIME + WS_C("grub"), +#endif /* GRUB_RUNTIME */ + +#ifdef __linux__ + WS_C("linux"), +#endif /* __linux__ */ + +#ifdef __MINGW32__ + WS_C("mingw32"), +#endif /* __MINGW32__ */ + +#ifdef __MINGW64__ + WS_C("mingw64"), +#endif /* __MINGW64__ */ + +#ifdef __OpenBSD__ + WS_C("openbsd"), +#endif /* __OpenBSD__ */ + +#ifdef __sun__ + WS_C("sun"), +#endif /* __sun__ */ + +#ifdef WINDOWS + WS_C("windows"), +#endif /* WINDOWS */ + + NULL + }; + + const wchar_t *const *platform = platforms; + + while (*platform) { + if (identifier->length == wcslen(*platform)) { + if (wcsncmp(*platform, identifier->characters, identifier->length) == 0) { + return 1; + } + } + + platform += 1; + } + + return 0; +} + +static int +processPlatformTestOperands (DataFile *file, int isDefined, void *data) { + return processConditionOperands(file, testPlatformName, !isDefined, "platform name", data); +} + +static DATA_OPERANDS_PROCESSOR(processIfPlatformOperands) { + return processPlatformTestOperands(file, 1, data); +} + +static DATA_OPERANDS_PROCESSOR(processIfNotPlatformOperands) { + return processPlatformTestOperands(file, 0, data); +} + static DATA_OPERANDS_PROCESSOR(processIncludeWrapper) { KeyTableData *ktd = data; int result; @@ -1178,6 +1255,8 @@ static DATA_OPERANDS_PROCESSOR(processKeyTableOperands) { {.name=WS_C("hotkey"), .processor=processHotkeyOperands}, {.name=WS_C("ifkey"), .processor=processIfKeyOperands, .unconditional=1}, {.name=WS_C("ifnotkey"), .processor=processIfNotKeyOperands, .unconditional=1}, + {.name=WS_C("ifplatform"), .processor=processIfPlatformOperands, .unconditional=1}, + {.name=WS_C("ifnotplatform"), .processor=processIfNotPlatformOperands, .unconditional=1}, {.name=WS_C("ignore"), .processor=processIgnoreOperands}, {.name=WS_C("include"), .processor=processIncludeWrapper}, {.name=WS_C("map"), .processor=processMapOperands}, diff --git a/Programs/ktb_inspect.h b/Programs/ktb_inspect.h index e7489a44..1834b168 100644 --- a/Programs/ktb_inspect.h +++ b/Programs/ktb_inspect.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_internal.h b/Programs/ktb_internal.h index f789313f..b4f0c9fe 100644 --- a/Programs/ktb_internal.h +++ b/Programs/ktb_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_keyboard.c b/Programs/ktb_keyboard.c index 4d797888..bd83f30b 100644 --- a/Programs/ktb_keyboard.c +++ b/Programs/ktb_keyboard.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_keyboard.h b/Programs/ktb_keyboard.h index ab3e3c6a..70ce1c6c 100644 --- a/Programs/ktb_keyboard.h +++ b/Programs/ktb_keyboard.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_list.c b/Programs/ktb_list.c index 047cbec2..a0587210 100644 --- a/Programs/ktb_list.c +++ b/Programs/ktb_list.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_list.h b/Programs/ktb_list.h index a48e3d45..cc6e728f 100644 --- a/Programs/ktb_list.h +++ b/Programs/ktb_list.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ktb_translate.c b/Programs/ktb_translate.c index 02e6dbbf..f8e691f6 100644 --- a/Programs/ktb_translate.c +++ b/Programs/ktb_translate.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -76,8 +76,8 @@ setAutoreleaseAlarm (KeyTable *table) { } else if (table->autorelease.alarm) { asyncResetAlarmIn(table->autorelease.alarm, table->autorelease.time); } else { - asyncSetAlarmIn(&table->autorelease.alarm, table->autorelease.time, - handleKeyAutoreleaseAlarm, table); + asyncNewRelativeAlarm(&table->autorelease.alarm, table->autorelease.time, + handleKeyAutoreleaseAlarm, table); } } @@ -389,8 +389,8 @@ ASYNC_ALARM_CALLBACK(handleLongPressAlarm) { static void setLongPressAlarm (KeyTable *table, unsigned char when) { - asyncSetAlarmIn(&table->longPress.alarm, PREFERENCES_TIME(when), - handleLongPressAlarm, table); + asyncNewRelativeAlarm(&table->longPress.alarm, PREFERENCES_TIME(when), + handleLongPressAlarm, table); } static int diff --git a/Programs/learn.c b/Programs/learn.c index 44cef8a4..e4e9f698 100644 --- a/Programs/learn.c +++ b/Programs/learn.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/learn.h b/Programs/learn.h index 9bfa1270..dd390aba 100644 --- a/Programs/learn.h +++ b/Programs/learn.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/leds.c b/Programs/leds.c index d6008768..6a1bffb0 100644 --- a/Programs/leds.c +++ b/Programs/leds.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/leds_linux.c b/Programs/leds_linux.c index a2a5bf0d..2c1008d6 100644 --- a/Programs/leds_linux.c +++ b/Programs/leds_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/leds_none.c b/Programs/leds_none.c index b349308e..b9c4e79e 100644 --- a/Programs/leds_none.c +++ b/Programs/leds_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/lock.c b/Programs/lock.c index d4f0170b..d9a70fe4 100644 --- a/Programs/lock.c +++ b/Programs/lock.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/log.c b/Programs/log.c index 4914f770..3cf2909b 100644 --- a/Programs/log.c +++ b/Programs/log.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/log_history.c b/Programs/log_history.c index c06b5b70..559012e9 100644 --- a/Programs/log_history.c +++ b/Programs/log_history.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/menu.c b/Programs/menu.c index 532ef59a..cc431ed2 100644 --- a/Programs/menu.c +++ b/Programs/menu.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/menu_prefs.c b/Programs/menu_prefs.c index afc3e412..7dde17c0 100644 --- a/Programs/menu_prefs.c +++ b/Programs/menu_prefs.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -341,6 +341,7 @@ changedStatusField (unsigned char index, unsigned char setting) { if (!haveStatusCells()) return 0; if (!braille->statusFields) return 0; if (*braille->statusFields != sfGeneric) return 0; + /* fall through */ case sfEnd: if (prefs.statusFields[index+1] != sfEnd) return 0; @@ -716,6 +717,10 @@ makePreferencesMenu (void) { { SUBMENU(navigationSubmenu, rootMenu, strtext("Navigation Options")); + { + NAME(strtext("Word Wrap")); + ITEM(newBooleanMenuItem(navigationSubmenu, &prefs.wordWrap, &itemName)); + } { NAME(strtext("Skip Identical Lines")); ITEM(newBooleanMenuItem(navigationSubmenu, &prefs.skipIdenticalLines, &itemName)); @@ -767,6 +772,11 @@ makePreferencesMenu (void) { ITEM(newEnumeratedMenuItem(navigationSubmenu, &prefs.cursorTrackingDelay, &itemName, strings)); } + { + NAME(strtext("Track Screen Scroll")); + ITEM(newBooleanMenuItem(navigationSubmenu, &prefs.trackScreenScroll, &itemName)); + } + #ifdef HAVE_LIBGPM { NAME(strtext("Track Screen Pointer")); diff --git a/Programs/menu_prefs.h b/Programs/menu_prefs.h index 8e99b974..05fc65bb 100644 --- a/Programs/menu_prefs.h +++ b/Programs/menu_prefs.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/message.c b/Programs/message.c index fc9034bd..95aa53cc 100644 --- a/Programs/message.c +++ b/Programs/message.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -76,9 +76,6 @@ handleMessageCommands (int command, void *data) { MessageData *mgd = data; switch (command & BRL_MSK_CMD) { - case BRL_CMD_NOOP: - return 1; - case BRL_CMD_LNUP: case BRL_CMD_PRDIFLN: case BRL_CMD_FWINLTSKIP: diff --git a/Programs/midi.c b/Programs/midi.c index 40ebea90..2c5f0c61 100644 --- a/Programs/midi.c +++ b/Programs/midi.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/midi_alsa.c b/Programs/midi_alsa.c index af9d477d..3afb55d4 100644 --- a/Programs/midi_alsa.c +++ b/Programs/midi_alsa.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -23,7 +23,6 @@ #include "log.h" #include "parse.h" #include "timing.h" -#include "dynld.h" #include "midi.h" struct MidiDeviceStruct { @@ -35,59 +34,28 @@ struct MidiDeviceStruct { unsigned char note; }; -#define MIDI_ALSA_SYMBOL(name) static typeof(snd_##name) *midiAlsa_##name -#define MIDI_ALSA_LOCATE(name) findSharedSymbol(midiAlsaLibrary, "snd_"#name, &midiAlsa_##name) - -static void *midiAlsaLibrary = NULL; -MIDI_ALSA_SYMBOL(strerror); -MIDI_ALSA_SYMBOL(seq_alloc_queue); -MIDI_ALSA_SYMBOL(seq_client_info_get_client); -MIDI_ALSA_SYMBOL(seq_client_info_get_name); -MIDI_ALSA_SYMBOL(seq_client_info_set_client); -MIDI_ALSA_SYMBOL(seq_client_info_sizeof); -MIDI_ALSA_SYMBOL(seq_close); -MIDI_ALSA_SYMBOL(seq_connect_to); -MIDI_ALSA_SYMBOL(seq_control_queue); -MIDI_ALSA_SYMBOL(seq_create_simple_port); -MIDI_ALSA_SYMBOL(seq_drain_output); -MIDI_ALSA_SYMBOL(seq_event_output); -MIDI_ALSA_SYMBOL(seq_get_queue_status); -MIDI_ALSA_SYMBOL(seq_open); -MIDI_ALSA_SYMBOL(seq_port_info_get_capability); -MIDI_ALSA_SYMBOL(seq_port_info_get_name); -MIDI_ALSA_SYMBOL(seq_port_info_get_port); -MIDI_ALSA_SYMBOL(seq_port_info_set_client); -MIDI_ALSA_SYMBOL(seq_port_info_set_port); -MIDI_ALSA_SYMBOL(seq_port_info_sizeof); -MIDI_ALSA_SYMBOL(seq_query_next_client); -MIDI_ALSA_SYMBOL(seq_query_next_port); -MIDI_ALSA_SYMBOL(seq_queue_status_free); -MIDI_ALSA_SYMBOL(seq_queue_status_get_real_time); -MIDI_ALSA_SYMBOL(seq_queue_status_malloc); -MIDI_ALSA_SYMBOL(seq_set_client_name); - -#define snd_seq_control_queue midiAlsa_seq_control_queue +#define snd_seq_control_queue snd_seq_control_queue static int findMidiDevice (MidiDevice *midi, int errorLevel, int *client, int *port) { - snd_seq_client_info_t *clientInformation = malloc(midiAlsa_seq_client_info_sizeof()); + snd_seq_client_info_t *clientInformation = malloc(snd_seq_client_info_sizeof()); if (clientInformation) { - memset(clientInformation, 0, midiAlsa_seq_client_info_sizeof()); - midiAlsa_seq_client_info_set_client(clientInformation, -1); + memset(clientInformation, 0, snd_seq_client_info_sizeof()); + snd_seq_client_info_set_client(clientInformation, -1); - while (midiAlsa_seq_query_next_client(midi->sequencer, clientInformation) >= 0) { - int clientIdentifier = midiAlsa_seq_client_info_get_client(clientInformation); - snd_seq_port_info_t *portInformation = malloc(midiAlsa_seq_port_info_sizeof()); + while (snd_seq_query_next_client(midi->sequencer, clientInformation) >= 0) { + int clientIdentifier = snd_seq_client_info_get_client(clientInformation); + snd_seq_port_info_t *portInformation = malloc(snd_seq_port_info_sizeof()); if (portInformation) { - memset(portInformation, 0, midiAlsa_seq_port_info_sizeof()); - midiAlsa_seq_port_info_set_client(portInformation, clientIdentifier); - midiAlsa_seq_port_info_set_port(portInformation, -1); + memset(portInformation, 0, snd_seq_port_info_sizeof()); + snd_seq_port_info_set_client(portInformation, clientIdentifier); + snd_seq_port_info_set_port(portInformation, -1); - while (midiAlsa_seq_query_next_port(midi->sequencer, portInformation) >= 0) { - int portIdentifier = midiAlsa_seq_port_info_get_port(portInformation); - int actualCapabilities = midiAlsa_seq_port_info_get_capability(portInformation); + while (snd_seq_query_next_port(midi->sequencer, portInformation) >= 0) { + int portIdentifier = snd_seq_port_info_get_port(portInformation); + int actualCapabilities = snd_seq_port_info_get_capability(portInformation); const int neededCapabilties = SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE; if (((actualCapabilities & neededCapabilties) == neededCapabilties) && @@ -95,8 +63,8 @@ findMidiDevice (MidiDevice *midi, int errorLevel, int *client, int *port) { *client = clientIdentifier; *port = portIdentifier; logMessage(LOG_DEBUG, "Using ALSA MIDI device: %d[%s] %d[%s]", - clientIdentifier, midiAlsa_seq_client_info_get_name(clientInformation), - portIdentifier, midiAlsa_seq_port_info_get_name(portInformation)); + clientIdentifier, snd_seq_client_info_get_name(clientInformation), + portIdentifier, snd_seq_port_info_get_name(portInformation)); free(portInformation); free(clientInformation); @@ -139,17 +107,17 @@ parseMidiDevice (MidiDevice *midi, int errorLevel, const char *device, int *clie if (isInteger(&clientIdentifier, clientSpecifier)) { if ((clientIdentifier >= 0) && (clientIdentifier <= 0XFFFF)) clientOk = 1; } else { - snd_seq_client_info_t *info = malloc(midiAlsa_seq_client_info_sizeof()); + snd_seq_client_info_t *info = malloc(snd_seq_client_info_sizeof()); if (info) { - memset(info, 0, midiAlsa_seq_client_info_sizeof()); - midiAlsa_seq_client_info_set_client(info, -1); + memset(info, 0, snd_seq_client_info_sizeof()); + snd_seq_client_info_set_client(info, -1); - while (midiAlsa_seq_query_next_client(midi->sequencer, info) >= 0) { - const char *name = midiAlsa_seq_client_info_get_name(info); + while (snd_seq_query_next_client(midi->sequencer, info) >= 0) { + const char *name = snd_seq_client_info_get_name(info); if (strstr(name, clientSpecifier)) { - clientIdentifier = midiAlsa_seq_client_info_get_client(info); + clientIdentifier = snd_seq_client_info_get_client(info); clientOk = 1; logMessage(LOG_INFO, "Using ALSA MIDI client: %d[%s]", clientIdentifier, name); @@ -170,18 +138,18 @@ parseMidiDevice (MidiDevice *midi, int errorLevel, const char *device, int *clie if (isInteger(&portIdentifier, portSpecifier)) { if ((portIdentifier >= 0) && (portIdentifier <= 0XFFFF)) portOk = 1; } else { - snd_seq_port_info_t *info = malloc(midiAlsa_seq_port_info_sizeof()); + snd_seq_port_info_t *info = malloc(snd_seq_port_info_sizeof()); if (info) { - memset(info, 0, midiAlsa_seq_port_info_sizeof()); - midiAlsa_seq_port_info_set_client(info, clientIdentifier); - midiAlsa_seq_port_info_set_port(info, -1); + memset(info, 0, snd_seq_port_info_sizeof()); + snd_seq_port_info_set_client(info, clientIdentifier); + snd_seq_port_info_set_port(info, -1); - while (midiAlsa_seq_query_next_port(midi->sequencer, info) >= 0) { - const char *name = midiAlsa_seq_port_info_get_name(info); + while (snd_seq_query_next_port(midi->sequencer, info) >= 0) { + const char *name = snd_seq_port_info_get_name(info); if (strstr(name, portSpecifier)) { - portIdentifier = midiAlsa_seq_port_info_get_port(info); + portIdentifier = snd_seq_port_info_get_port(info); portOk = 1; logMessage(LOG_INFO, "Using ALSA MIDI port: %d[%s]", portIdentifier, name); @@ -227,14 +195,14 @@ parseMidiDevice (MidiDevice *midi, int errorLevel, const char *device, int *clie static void updateMidiStatus (MidiDevice *midi) { - midiAlsa_seq_get_queue_status(midi->sequencer, midi->queue, midi->status); + snd_seq_get_queue_status(midi->sequencer, midi->queue, midi->status); } static void startMidiTimer (MidiDevice *midi) { if (!midi->time.tv_sec && !midi->time.tv_nsec) { updateMidiStatus(midi); - midi->time = *midiAlsa_seq_queue_status_get_real_time(midi->status); + midi->time = *snd_seq_queue_status_get_real_time(midi->status); } } @@ -248,52 +216,18 @@ MidiDevice * openMidiDevice (int errorLevel, const char *device) { MidiDevice *midi; - if (!midiAlsaLibrary) { - if (!(midiAlsaLibrary = loadSharedObject("libasound.so.2"))) { - logMessage(LOG_ERR, "Unable to load ALSA MIDI library."); - return NULL; - } - - MIDI_ALSA_LOCATE(strerror); - MIDI_ALSA_LOCATE(seq_alloc_queue); - MIDI_ALSA_LOCATE(seq_client_info_get_client); - MIDI_ALSA_LOCATE(seq_client_info_get_name); - MIDI_ALSA_LOCATE(seq_client_info_set_client); - MIDI_ALSA_LOCATE(seq_client_info_sizeof); - MIDI_ALSA_LOCATE(seq_close); - MIDI_ALSA_LOCATE(seq_connect_to); - MIDI_ALSA_LOCATE(seq_control_queue); - MIDI_ALSA_LOCATE(seq_create_simple_port); - MIDI_ALSA_LOCATE(seq_drain_output); - MIDI_ALSA_LOCATE(seq_event_output); - MIDI_ALSA_LOCATE(seq_get_queue_status); - MIDI_ALSA_LOCATE(seq_open); - MIDI_ALSA_LOCATE(seq_port_info_get_capability); - MIDI_ALSA_LOCATE(seq_port_info_get_name); - MIDI_ALSA_LOCATE(seq_port_info_get_port); - MIDI_ALSA_LOCATE(seq_port_info_set_client); - MIDI_ALSA_LOCATE(seq_port_info_set_port); - MIDI_ALSA_LOCATE(seq_port_info_sizeof); - MIDI_ALSA_LOCATE(seq_query_next_client); - MIDI_ALSA_LOCATE(seq_query_next_port); - MIDI_ALSA_LOCATE(seq_queue_status_free); - MIDI_ALSA_LOCATE(seq_queue_status_get_real_time); - MIDI_ALSA_LOCATE(seq_queue_status_malloc); - MIDI_ALSA_LOCATE(seq_set_client_name); - } - if ((midi = malloc(sizeof(*midi)))) { const char *sequencerName = "default"; int result; - if ((result = midiAlsa_seq_open(&midi->sequencer, sequencerName, SND_SEQ_OPEN_OUTPUT, 0)) >= 0) { - midiAlsa_seq_set_client_name(midi->sequencer, PACKAGE_NAME); + if ((result = snd_seq_open(&midi->sequencer, sequencerName, SND_SEQ_OPEN_OUTPUT, 0)) >= 0) { + snd_seq_set_client_name(midi->sequencer, PACKAGE_NAME); - if ((midi->port = midiAlsa_seq_create_simple_port(midi->sequencer, "out0", + if ((midi->port = snd_seq_create_simple_port(midi->sequencer, "out0", SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ, SND_SEQ_PORT_TYPE_APPLICATION)) >= 0) { - if ((midi->queue = midiAlsa_seq_alloc_queue(midi->sequencer)) >= 0) { - if ((result = midiAlsa_seq_queue_status_malloc(&midi->status)) >= 0) { + if ((midi->queue = snd_seq_alloc_queue(midi->sequencer)) >= 0) { + if ((result = snd_seq_queue_status_malloc(&midi->status)) >= 0) { int client = 0; int port = 0; int deviceOk; @@ -307,38 +241,38 @@ openMidiDevice (int errorLevel, const char *device) { if (deviceOk) { logMessage(LOG_DEBUG, "Connecting to ALSA MIDI device: %d:%d", client, port); - if ((result = midiAlsa_seq_connect_to(midi->sequencer, midi->port, client, port)) >= 0) { + if ((result = snd_seq_connect_to(midi->sequencer, midi->port, client, port)) >= 0) { if ((result = snd_seq_start_queue(midi->sequencer, midi->queue, NULL)) >= 0) { stopMidiTimer(midi); return midi; } else { logMessage(errorLevel, "Cannot start ALSA MIDI queue: %d:%d: %s", - client, port, midiAlsa_strerror(result)); + client, port, snd_strerror(result)); } } else { logMessage(errorLevel, "Cannot connect to ALSA MIDI device: %d:%d: %s", - client, port, midiAlsa_strerror(result)); + client, port, snd_strerror(result)); } } - midiAlsa_seq_queue_status_free(midi->status); + snd_seq_queue_status_free(midi->status); } else { logMessage(errorLevel, "Cannot allocate ALSA MIDI queue status container: %s", - midiAlsa_strerror(result)); + snd_strerror(result)); } } else { logMessage(errorLevel, "Cannot allocate ALSA MIDI queue: %s", - midiAlsa_strerror(result)); + snd_strerror(result)); } } else { logMessage(errorLevel, "Cannot create ALSA MIDI output port: %s", - midiAlsa_strerror(midi->port)); + snd_strerror(midi->port)); } - midiAlsa_seq_close(midi->sequencer); + snd_seq_close(midi->sequencer); } else { logMessage(errorLevel, "Cannot open ALSA sequencer: %s: %s", - sequencerName, midiAlsa_strerror(result)); + sequencerName, snd_strerror(result)); } free(midi); @@ -350,8 +284,8 @@ openMidiDevice (int errorLevel, const char *device) { void closeMidiDevice (MidiDevice *midi) { - midiAlsa_seq_queue_status_free(midi->status); - midiAlsa_seq_close(midi->sequencer); + snd_seq_queue_status_free(midi->status); + snd_seq_close(midi->sequencer); free(midi); } @@ -362,7 +296,7 @@ flushMidiDevice (MidiDevice *midi) { updateMidiStatus(midi); { - const snd_seq_real_time_t *time = midiAlsa_seq_queue_status_get_real_time(midi->status); + const snd_seq_real_time_t *time = snd_seq_queue_status_get_real_time(midi->status); int seconds = midi->time.tv_sec - time->tv_sec; int nanoseconds = midi->time.tv_nsec - time->tv_nsec; duration = (seconds * 1000) + (nanoseconds / 1000000); @@ -392,11 +326,11 @@ static int sendMidiEvent (MidiDevice *midi, snd_seq_event_t *event) { int result; - if ((result = midiAlsa_seq_event_output(midi->sequencer, event)) >= 0) { - midiAlsa_seq_drain_output(midi->sequencer); + if ((result = snd_seq_event_output(midi->sequencer, event)) >= 0) { + snd_seq_drain_output(midi->sequencer); return 1; } else { - logMessage(LOG_ERR, "ALSA MIDI write error: %s", midiAlsa_strerror(result)); + logMessage(LOG_ERR, "ALSA MIDI write error: %s", snd_strerror(result)); } return 0; } diff --git a/Programs/midi_darwin.c b/Programs/midi_darwin.c index b2a21e93..f2c422ba 100644 --- a/Programs/midi_darwin.c +++ b/Programs/midi_darwin.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/midi_none.c b/Programs/midi_none.c index a6a62f5b..93ea33a3 100644 --- a/Programs/midi_none.c +++ b/Programs/midi_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/midi_oss.c b/Programs/midi_oss.c index adbd376b..6e26399c 100644 --- a/Programs/midi_oss.c +++ b/Programs/midi_oss.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/midi_windows.c b/Programs/midi_windows.c index 7b83ccdf..a9b69fe3 100644 --- a/Programs/midi_windows.c +++ b/Programs/midi_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mkdrvtab b/Programs/mkdrvtab index 9a0b6f0a..c6ba266f 100755 --- a/Programs/mkdrvtab +++ b/Programs/mkdrvtab @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Programs/mntfs_linux.c b/Programs/mntfs_linux.c index 3ed47b92..a4d4d48b 100644 --- a/Programs/mntfs_linux.c +++ b/Programs/mntfs_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntfs_none.c b/Programs/mntfs_none.c index 34e2d02d..9015bfed 100644 --- a/Programs/mntfs_none.c +++ b/Programs/mntfs_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntpt.c b/Programs/mntpt.c index 8953cbb3..0e08ec40 100644 --- a/Programs/mntpt.c +++ b/Programs/mntpt.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -91,7 +91,7 @@ updateMountsTable (MountEntry *entry) { } if (retry) { - asyncSetAlarmIn(NULL, MOUNT_TABLE_UPDATE_RETRY_INTERVAL, retryMountsTableUpdate, entry); + asyncNewRelativeAlarm(NULL, MOUNT_TABLE_UPDATE_RETRY_INTERVAL, retryMountsTableUpdate, entry); } else { if (entry->mountPath) free(entry->mountPath); if (entry->mountReference) free(entry->mountReference); diff --git a/Programs/mntpt_internal.h b/Programs/mntpt_internal.h index c0ed49bb..d2e986a9 100644 --- a/Programs/mntpt_internal.h +++ b/Programs/mntpt_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntpt_mntent.c b/Programs/mntpt_mntent.c index 994cd22c..be877e99 100644 --- a/Programs/mntpt_mntent.c +++ b/Programs/mntpt_mntent.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntpt_mntent.h b/Programs/mntpt_mntent.h index 9f3545eb..78238a9e 100644 --- a/Programs/mntpt_mntent.h +++ b/Programs/mntpt_mntent.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntpt_mnttab.c b/Programs/mntpt_mnttab.c index 6dd3488f..65a8f2d7 100644 --- a/Programs/mntpt_mnttab.c +++ b/Programs/mntpt_mnttab.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntpt_mnttab.h b/Programs/mntpt_mnttab.h index 6622fbdf..707e5bea 100644 --- a/Programs/mntpt_mnttab.h +++ b/Programs/mntpt_mnttab.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntpt_none.c b/Programs/mntpt_none.c index 1b978d26..e3b53ed6 100644 --- a/Programs/mntpt_none.c +++ b/Programs/mntpt_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/mntpt_none.h b/Programs/mntpt_none.h index 0b202bfa..d6e2bedd 100644 --- a/Programs/mntpt_none.h +++ b/Programs/mntpt_none.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/notes.c b/Programs/notes.c index e8450ecc..f4c5eccf 100644 --- a/Programs/notes.c +++ b/Programs/notes.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/notes_beep.c b/Programs/notes_beep.c index a7c80b59..52b1c588 100644 --- a/Programs/notes_beep.c +++ b/Programs/notes_beep.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/notes_fm.c b/Programs/notes_fm.c index b2adcaeb..f27ed797 100644 --- a/Programs/notes_fm.c +++ b/Programs/notes_fm.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/notes_midi.c b/Programs/notes_midi.c index 95e13cc6..9ac8ebc4 100644 --- a/Programs/notes_midi.c +++ b/Programs/notes_midi.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/notes_pcm.c b/Programs/notes_pcm.c index 2e2f0317..f31de564 100644 --- a/Programs/notes_pcm.c +++ b/Programs/notes_pcm.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/options.c b/Programs/options.c index 896fa837..5db04132 100644 --- a/Programs/options.c +++ b/Programs/options.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/parameters.h b/Programs/parameters.h index 73835dbd..eac6f217 100644 --- a/Programs/parameters.h +++ b/Programs/parameters.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/params_linux.c b/Programs/params_linux.c index f6092cf8..448e2247 100644 --- a/Programs/params_linux.c +++ b/Programs/params_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/params_none.c b/Programs/params_none.c index f248218b..a06446c0 100644 --- a/Programs/params_none.c +++ b/Programs/params_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/parse.c b/Programs/parse.c index e7535177..9528f175 100644 --- a/Programs/parse.c +++ b/Programs/parse.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -342,6 +342,28 @@ validateFloat (float *value, const char *string, const float *minimum, const flo } #endif /* NO_FLOAT */ +int +hasQualifier (const char **identifier, const char *qualifier) { + const char *delimiter = strchr(*identifier, PARAMETER_QUALIFIER_CHARACTER); + if (!delimiter) return 0; + + size_t count = delimiter - *identifier; + if (memchr(*identifier, FILE_PATH_DELIMITER, count)) return 0; + + if (qualifier) { + if (count != strlen(qualifier)) return 0; + if (strncasecmp(*identifier, qualifier, count) != 0) return 0; + } + + *identifier += count + 1; + return 1; +} + +int +hasNoQualifier (const char *identifier) { + return !hasQualifier(&identifier, NULL); +} + static int parseParameters ( char **values, diff --git a/Programs/pcm.c b/Programs/pcm.c index 3a8468ab..8282a70f 100644 --- a/Programs/pcm.c +++ b/Programs/pcm.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pcm_alsa.c b/Programs/pcm_alsa.c index 28a12041..7618bdc0 100644 --- a/Programs/pcm_alsa.c +++ b/Programs/pcm_alsa.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -23,7 +23,6 @@ #include "log.h" #include "timing.h" -#include "dynld.h" #include "pcm.h" struct PcmDeviceStruct { @@ -35,43 +34,9 @@ struct PcmDeviceStruct { unsigned int periodTime; }; -#define PCM_ALSA_SYMBOL(name) static typeof(snd_##name) *pcmAlsa_##name -#define PCM_ALSA_LOCATE(name) findSharedSymbol(pcmAlsaLibrary, "snd_"#name, &pcmAlsa_##name) - -static void *pcmAlsaLibrary = NULL; -PCM_ALSA_SYMBOL(strerror); -PCM_ALSA_SYMBOL(pcm_open); -PCM_ALSA_SYMBOL(pcm_close); -PCM_ALSA_SYMBOL(pcm_nonblock); -PCM_ALSA_SYMBOL(pcm_hw_params_malloc); -PCM_ALSA_SYMBOL(pcm_hw_params_any); -PCM_ALSA_SYMBOL(pcm_hw_params_set_access); -PCM_ALSA_SYMBOL(pcm_hw_params_get_rate); -PCM_ALSA_SYMBOL(pcm_hw_params_get_sbits); -PCM_ALSA_SYMBOL(pcm_hw_params_get_format); -PCM_ALSA_SYMBOL(pcm_hw_params_set_format); -PCM_ALSA_SYMBOL(pcm_hw_params_get_rate_min); -PCM_ALSA_SYMBOL(pcm_hw_params_get_rate_max); -PCM_ALSA_SYMBOL(pcm_hw_params_set_rate_near); -PCM_ALSA_SYMBOL(pcm_hw_params_get_channels); -PCM_ALSA_SYMBOL(pcm_hw_params_get_channels_min); -PCM_ALSA_SYMBOL(pcm_hw_params_get_channels_max); -PCM_ALSA_SYMBOL(pcm_hw_params_set_channels_near); -PCM_ALSA_SYMBOL(pcm_hw_params_set_buffer_time_near); -PCM_ALSA_SYMBOL(pcm_hw_params_set_period_time_near); -PCM_ALSA_SYMBOL(pcm_hw_params); -PCM_ALSA_SYMBOL(pcm_hw_params_get_sbits); -PCM_ALSA_SYMBOL(pcm_hw_params_get_period_size); -PCM_ALSA_SYMBOL(pcm_hw_params_free); -PCM_ALSA_SYMBOL(pcm_prepare); -PCM_ALSA_SYMBOL(pcm_writei); -PCM_ALSA_SYMBOL(pcm_drain); -PCM_ALSA_SYMBOL(pcm_drop); -PCM_ALSA_SYMBOL(pcm_resume); - static void logPcmError (int level, const char *action, int code) { - logMessage(level, "ALSA PCM %s error: %s", action, pcmAlsa_strerror(code)); + logMessage(level, "ALSA PCM %s error: %s", action, snd_strerror(code)); } static int @@ -85,7 +50,7 @@ configurePcmSampleFormat (PcmDevice *pcm, int errorLevel) { const snd_pcm_format_t *format = formats; while (*format != SND_PCM_FORMAT_UNKNOWN) { - int result = pcmAlsa_pcm_hw_params_set_format(pcm->handle, pcm->hardwareParameters, *format); + int result = snd_pcm_hw_params_set_format(pcm->handle, pcm->hardwareParameters, *format); if (result >= 0) return 1; if (result != -EINVAL) { @@ -106,12 +71,12 @@ configurePcmSampleRate (PcmDevice *pcm, int errorLevel) { unsigned int minimum; unsigned int maximum; - if ((result = pcmAlsa_pcm_hw_params_get_rate_min(pcm->hardwareParameters, &minimum, NULL)) < 0) { + if ((result = snd_pcm_hw_params_get_rate_min(pcm->hardwareParameters, &minimum, NULL)) < 0) { logPcmError(errorLevel, "get rate min", result); return 0; } - if ((result = pcmAlsa_pcm_hw_params_get_rate_max(pcm->hardwareParameters, &maximum, NULL)) < 0) { + if ((result = snd_pcm_hw_params_get_rate_max(pcm->hardwareParameters, &maximum, NULL)) < 0) { logPcmError(errorLevel, "get rate max", result); return 0; } @@ -122,7 +87,7 @@ configurePcmSampleRate (PcmDevice *pcm, int errorLevel) { } pcm->sampleRate = MIN(MAX(16000, minimum), maximum); - if ((result = pcmAlsa_pcm_hw_params_set_rate_near(pcm->handle, pcm->hardwareParameters, &pcm->sampleRate, NULL)) < 0) { + if ((result = snd_pcm_hw_params_set_rate_near(pcm->handle, pcm->hardwareParameters, &pcm->sampleRate, NULL)) < 0) { logPcmError(errorLevel, "set rate near", result); return 0; } @@ -136,12 +101,12 @@ configurePcmChannelCount (PcmDevice *pcm, int errorLevel) { unsigned int minimum; unsigned int maximum; - if ((result = pcmAlsa_pcm_hw_params_get_channels_min(pcm->hardwareParameters, &minimum)) < 0) { + if ((result = snd_pcm_hw_params_get_channels_min(pcm->hardwareParameters, &minimum)) < 0) { logPcmError(errorLevel, "get channels min", result); return 0; } - if ((result = pcmAlsa_pcm_hw_params_get_channels_max(pcm->hardwareParameters, &maximum)) < 0) { + if ((result = snd_pcm_hw_params_get_channels_max(pcm->hardwareParameters, &maximum)) < 0) { logPcmError(errorLevel, "get channels max", result); return 0; } @@ -152,7 +117,7 @@ configurePcmChannelCount (PcmDevice *pcm, int errorLevel) { } pcm->channelCount = minimum; - if ((result = pcmAlsa_pcm_hw_params_set_channels_near(pcm->handle, pcm->hardwareParameters, &pcm->channelCount)) < 0) { + if ((result = snd_pcm_hw_params_set_channels_near(pcm->handle, pcm->hardwareParameters, &pcm->channelCount)) < 0) { logPcmError(errorLevel, "set channels near", result); return 0; } @@ -164,61 +129,24 @@ PcmDevice * openPcmDevice (int errorLevel, const char *device) { PcmDevice *pcm; - if (!pcmAlsaLibrary) { - if (!(pcmAlsaLibrary = loadSharedObject("libasound.so.2"))) { - logMessage(LOG_ERR, "Unable to load ALSA PCM library."); - return NULL; - } - - PCM_ALSA_LOCATE(strerror); - PCM_ALSA_LOCATE(pcm_open); - PCM_ALSA_LOCATE(pcm_close); - PCM_ALSA_LOCATE(pcm_nonblock); - PCM_ALSA_LOCATE(pcm_hw_params_malloc); - PCM_ALSA_LOCATE(pcm_hw_params_any); - PCM_ALSA_LOCATE(pcm_hw_params_set_access); - PCM_ALSA_LOCATE(pcm_hw_params_get_channels); - PCM_ALSA_LOCATE(pcm_hw_params_get_channels_min); - PCM_ALSA_LOCATE(pcm_hw_params_get_channels_max); - PCM_ALSA_LOCATE(pcm_hw_params_set_channels_near); - PCM_ALSA_LOCATE(pcm_hw_params_get_format); - PCM_ALSA_LOCATE(pcm_hw_params_set_format); - PCM_ALSA_LOCATE(pcm_hw_params_get_rate); - PCM_ALSA_LOCATE(pcm_hw_params_get_sbits); - PCM_ALSA_LOCATE(pcm_hw_params_get_rate_min); - PCM_ALSA_LOCATE(pcm_hw_params_get_rate_max); - PCM_ALSA_LOCATE(pcm_hw_params_get_period_size); - PCM_ALSA_LOCATE(pcm_hw_params_set_rate_near); - PCM_ALSA_LOCATE(pcm_hw_params_set_buffer_time_near); - PCM_ALSA_LOCATE(pcm_hw_params_set_period_time_near); - PCM_ALSA_LOCATE(pcm_hw_params); - PCM_ALSA_LOCATE(pcm_hw_params_get_sbits); - PCM_ALSA_LOCATE(pcm_hw_params_free); - PCM_ALSA_LOCATE(pcm_prepare); - PCM_ALSA_LOCATE(pcm_writei); - PCM_ALSA_LOCATE(pcm_drain); - PCM_ALSA_LOCATE(pcm_drop); - PCM_ALSA_LOCATE(pcm_resume); - } - if ((pcm = malloc(sizeof(*pcm)))) { int result; if (!*device) device = "default"; - if ((result = pcmAlsa_pcm_open(&pcm->handle, device, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK)) >= 0) { - pcmAlsa_pcm_nonblock(pcm->handle, 0); + if ((result = snd_pcm_open(&pcm->handle, device, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK)) >= 0) { + snd_pcm_nonblock(pcm->handle, 0); - if ((result = pcmAlsa_pcm_hw_params_malloc(&pcm->hardwareParameters)) >= 0) { - if ((result = pcmAlsa_pcm_hw_params_any(pcm->handle, pcm->hardwareParameters)) >= 0) { - if ((result = pcmAlsa_pcm_hw_params_set_access(pcm->handle, pcm->hardwareParameters, SND_PCM_ACCESS_RW_INTERLEAVED)) >= 0) { + if ((result = snd_pcm_hw_params_malloc(&pcm->hardwareParameters)) >= 0) { + if ((result = snd_pcm_hw_params_any(pcm->handle, pcm->hardwareParameters)) >= 0) { + if ((result = snd_pcm_hw_params_set_access(pcm->handle, pcm->hardwareParameters, SND_PCM_ACCESS_RW_INTERLEAVED)) >= 0) { if (configurePcmSampleFormat(pcm, errorLevel)) { if (configurePcmSampleRate(pcm, errorLevel)) { if (configurePcmChannelCount(pcm, errorLevel)) { pcm->bufferTime = 500000; - if ((result = pcmAlsa_pcm_hw_params_set_buffer_time_near(pcm->handle, pcm->hardwareParameters, &pcm->bufferTime, NULL)) >= 0) { + if ((result = snd_pcm_hw_params_set_buffer_time_near(pcm->handle, pcm->hardwareParameters, &pcm->bufferTime, NULL)) >= 0) { pcm->periodTime = pcm->bufferTime / 8; - if ((result = pcmAlsa_pcm_hw_params_set_period_time_near(pcm->handle, pcm->hardwareParameters, &pcm->periodTime, NULL)) >= 0) { - if ((result = pcmAlsa_pcm_hw_params(pcm->handle, pcm->hardwareParameters)) >= 0) { + if ((result = snd_pcm_hw_params_set_period_time_near(pcm->handle, pcm->hardwareParameters, &pcm->periodTime, NULL)) >= 0) { + if ((result = snd_pcm_hw_params(pcm->handle, pcm->hardwareParameters)) >= 0) { logMessage(LOG_DEBUG, "ALSA PCM: Chan=%u Rate=%u BufTim=%u PerTim=%u", pcm->channelCount, pcm->sampleRate, pcm->bufferTime, pcm->periodTime); return pcm; } else { @@ -240,12 +168,12 @@ openPcmDevice (int errorLevel, const char *device) { logPcmError(errorLevel, "get hardware parameters", result); } - pcmAlsa_pcm_hw_params_free(pcm->hardwareParameters); + snd_pcm_hw_params_free(pcm->hardwareParameters); } else { logPcmError(errorLevel, "hardware parameters allocation", result); } - pcmAlsa_pcm_close(pcm->handle); + snd_pcm_close(pcm->handle); } else { logPcmError(errorLevel, "open", result); } @@ -261,14 +189,14 @@ openPcmDevice (int errorLevel, const char *device) { void closePcmDevice (PcmDevice *pcm) { awaitPcmOutput(pcm); - pcmAlsa_pcm_close(pcm->handle); - pcmAlsa_pcm_hw_params_free(pcm->hardwareParameters); + snd_pcm_close(pcm->handle); + snd_pcm_hw_params_free(pcm->hardwareParameters); free(pcm); } static int getPcmFrameSize (PcmDevice *pcm) { - return getPcmChannelCount(pcm) * (pcmAlsa_pcm_hw_params_get_sbits(pcm->hardwareParameters) / 8); + return getPcmChannelCount(pcm) * (snd_pcm_hw_params_get_sbits(pcm->hardwareParameters) / 8); } int @@ -279,23 +207,23 @@ writePcmData (PcmDevice *pcm, const unsigned char *buffer, int count) { while (framesLeft > 0) { int result; - if ((result = pcmAlsa_pcm_writei(pcm->handle, buffer, framesLeft)) > 0) { + if ((result = snd_pcm_writei(pcm->handle, buffer, framesLeft)) > 0) { framesLeft -= result; buffer += result * frameSize; } else { switch (result) { case -EPIPE: - if ((result = pcmAlsa_pcm_prepare(pcm->handle)) < 0) { + if ((result = snd_pcm_prepare(pcm->handle)) < 0) { logPcmError(LOG_WARNING, "underrun recovery - prepare", result); return 0; } continue; case -ESTRPIPE: - while ((result = pcmAlsa_pcm_resume(pcm->handle)) == -EAGAIN) approximateDelay(1); + while ((result = snd_pcm_resume(pcm->handle)) == -EAGAIN) approximateDelay(1); if (result < 0) { - if ((result = pcmAlsa_pcm_prepare(pcm->handle)) < 0) { + if ((result = snd_pcm_prepare(pcm->handle)) < 0) { logPcmError(LOG_WARNING, "resume - prepare", result); return 0; } @@ -312,7 +240,7 @@ getPcmBlockSize (PcmDevice *pcm) { snd_pcm_uframes_t frames; int result; - if ((result = pcmAlsa_pcm_hw_params_get_period_size(pcm->hardwareParameters, &frames, NULL)) >= 0) { + if ((result = snd_pcm_hw_params_get_period_size(pcm->hardwareParameters, &frames, NULL)) >= 0) { return frames * getPcmFrameSize(pcm); } else { logPcmError(LOG_ERR, "get period size", result); @@ -330,7 +258,7 @@ setPcmSampleRate (PcmDevice *pcm, int rate) { int result; pcm->sampleRate = rate; - if ((result = pcmAlsa_pcm_hw_params_set_rate_near(pcm->handle, pcm->hardwareParameters, &pcm->sampleRate, NULL)) < 0) { + if ((result = snd_pcm_hw_params_set_rate_near(pcm->handle, pcm->hardwareParameters, &pcm->sampleRate, NULL)) < 0) { logPcmError(LOG_ERR, "set rate near", result); } @@ -347,7 +275,7 @@ setPcmChannelCount (PcmDevice *pcm, int channels) { int result; pcm->channelCount = channels; - if ((result = pcmAlsa_pcm_hw_params_set_channels_near(pcm->handle, pcm->hardwareParameters, &pcm->channelCount)) < 0) { + if ((result = snd_pcm_hw_params_set_channels_near(pcm->handle, pcm->hardwareParameters, &pcm->channelCount)) < 0) { logPcmError(LOG_ERR, "set channels near", result); } @@ -374,7 +302,7 @@ getPcmAmplitudeFormat (PcmDevice *pcm) { snd_pcm_format_t format; int result; - if ((result = pcmAlsa_pcm_hw_params_get_format(pcm->hardwareParameters, &format)) < 0) { + if ((result = snd_pcm_hw_params_get_format(pcm->hardwareParameters, &format)) < 0) { logPcmError(LOG_ERR, "get format", result); } else { const AmplitudeFormatEntry *entry = amplitudeFormatTable; @@ -396,7 +324,7 @@ setPcmAmplitudeFormat (PcmDevice *pcm, PcmAmplitudeFormat format) { ++entry; } - if ((result = pcmAlsa_pcm_hw_params_set_format(pcm->handle, pcm->hardwareParameters, entry->external)) < 0) { + if ((result = snd_pcm_hw_params_set_format(pcm->handle, pcm->hardwareParameters, entry->external)) < 0) { logPcmError(LOG_ERR, "set format", result); return getPcmAmplitudeFormat(pcm); } @@ -411,11 +339,11 @@ forcePcmOutput (PcmDevice *pcm) { void awaitPcmOutput (PcmDevice *pcm) { int result; - if ((result = pcmAlsa_pcm_drain(pcm->handle)) < 0) logPcmError(LOG_WARNING, "drain", result); + if ((result = snd_pcm_drain(pcm->handle)) < 0) logPcmError(LOG_WARNING, "drain", result); } void cancelPcmOutput (PcmDevice *pcm) { int result; - if ((result = pcmAlsa_pcm_drop(pcm->handle)) < 0) logPcmError(LOG_WARNING, "drop", result); + if ((result = snd_pcm_drop(pcm->handle)) < 0) logPcmError(LOG_WARNING, "drop", result); } diff --git a/Programs/pcm_android.c b/Programs/pcm_android.c index 81a29d51..e890f87f 100644 --- a/Programs/pcm_android.c +++ b/Programs/pcm_android.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pcm_audio.c b/Programs/pcm_audio.c index 05e3a214..d9672084 100644 --- a/Programs/pcm_audio.c +++ b/Programs/pcm_audio.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pcm_hpux.c b/Programs/pcm_hpux.c index 82e8b8e7..415a33a2 100644 --- a/Programs/pcm_hpux.c +++ b/Programs/pcm_hpux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pcm_none.c b/Programs/pcm_none.c index 9e2fa9e2..4f8a0f19 100644 --- a/Programs/pcm_none.c +++ b/Programs/pcm_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pcm_oss.c b/Programs/pcm_oss.c index 4e88a795..44b76d2a 100644 --- a/Programs/pcm_oss.c +++ b/Programs/pcm_oss.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pcm_qsa.c b/Programs/pcm_qsa.c index 83b7937c..d78e49f1 100644 --- a/Programs/pcm_qsa.c +++ b/Programs/pcm_qsa.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pcm_windows.c b/Programs/pcm_windows.c index 925d1189..3f2fd759 100644 --- a/Programs/pcm_windows.c +++ b/Programs/pcm_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pgmpath_linux.c b/Programs/pgmpath_linux.c index b5d18a8b..6258a07f 100644 --- a/Programs/pgmpath_linux.c +++ b/Programs/pgmpath_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pgmpath_none.c b/Programs/pgmpath_none.c index 0e621851..556207b5 100644 --- a/Programs/pgmpath_none.c +++ b/Programs/pgmpath_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pgmpath_solaris.c b/Programs/pgmpath_solaris.c index 31f2462a..8253892e 100644 --- a/Programs/pgmpath_solaris.c +++ b/Programs/pgmpath_solaris.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pgmpath_windows.c b/Programs/pgmpath_windows.c index 6a4cb33c..179ceb29 100644 --- a/Programs/pgmpath_windows.c +++ b/Programs/pgmpath_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pid.c b/Programs/pid.c index 2e2ab53d..32b85afb 100644 --- a/Programs/pid.c +++ b/Programs/pid.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pipe.c b/Programs/pipe.c index b79b398b..790fe5a2 100644 --- a/Programs/pipe.c +++ b/Programs/pipe.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/pipe.h b/Programs/pipe.h index af36c20f..87e2fd5b 100644 --- a/Programs/pipe.h +++ b/Programs/pipe.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ports_glibc.c b/Programs/ports_glibc.c index a80c6dcf..86a6e641 100644 --- a/Programs/ports_glibc.c +++ b/Programs/ports_glibc.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ports_grub.c b/Programs/ports_grub.c index 0c8eb6b8..b7df5a94 100644 --- a/Programs/ports_grub.c +++ b/Programs/ports_grub.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ports_kfreebsd.c b/Programs/ports_kfreebsd.c index f982268f..f9c7a80e 100644 --- a/Programs/ports_kfreebsd.c +++ b/Programs/ports_kfreebsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ports_msdos.c b/Programs/ports_msdos.c index dc6759cd..c0326e64 100644 --- a/Programs/ports_msdos.c +++ b/Programs/ports_msdos.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ports_none.c b/Programs/ports_none.c index 87e280f0..aac7b023 100644 --- a/Programs/ports_none.c +++ b/Programs/ports_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ports_windows.c b/Programs/ports_windows.c index d3c8196c..de1187b9 100644 --- a/Programs/ports_windows.c +++ b/Programs/ports_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ports_x86.h b/Programs/ports_x86.h index 0b7e77dc..42286ff0 100644 --- a/Programs/ports_x86.h +++ b/Programs/ports_x86.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/prefs.c b/Programs/prefs.c index 9425a78f..ae9bab38 100644 --- a/Programs/prefs.c +++ b/Programs/prefs.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/prefs_internal.h b/Programs/prefs_internal.h index db8736a3..5de21fe6 100644 --- a/Programs/prefs_internal.h +++ b/Programs/prefs_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/prefs_table.c b/Programs/prefs_table.c index e96a69a9..02bbc5aa 100644 --- a/Programs/prefs_table.c +++ b/Programs/prefs_table.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -249,6 +249,12 @@ const PreferenceEntry preferenceTable[] = { .setting = &prefs.capitalsInvisibleTime }, + { .name = "word-wrap", + .defaultValue = DEFAULT_WORD_WRAP, + .settingNames = &preferenceStringTable_boolean, + .setting = &prefs.wordWrap + }, + { .name = "skip-identical-lines", .defaultValue = DEFAULT_SKIP_IDENTICAL_LINES, .settingNames = &preferenceStringTable_boolean, @@ -290,6 +296,12 @@ const PreferenceEntry preferenceTable[] = { .setting = &prefs.cursorTrackingDelay }, + { .name = "track-screen-scroll", + .defaultValue = DEFAULT_TRACK_SCREEN_SCROLL, + .settingNames = &preferenceStringTable_boolean, + .setting = &prefs.trackScreenScroll + }, + { .name = "track-screen-pointer", .defaultValue = DEFAULT_TRACK_SCREEN_POINTER, .settingNames = &preferenceStringTable_boolean, diff --git a/Programs/profile.c b/Programs/profile.c index 98d6e9ed..4e263caf 100644 --- a/Programs/profile.c +++ b/Programs/profile.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/profile.h b/Programs/profile.h index a1983c06..e2196b9f 100644 --- a/Programs/profile.h +++ b/Programs/profile.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/profile_types.h b/Programs/profile_types.h index db2f327f..5ec5b81a 100644 --- a/Programs/profile_types.h +++ b/Programs/profile_types.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/program.c b/Programs/program.c index 00012dce..801b37ac 100644 --- a/Programs/program.c +++ b/Programs/program.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/queue.c b/Programs/queue.c index 508f6c06..ef284633 100644 --- a/Programs/queue.c +++ b/Programs/queue.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/reldeps.mk b/Programs/reldeps.mk index a812e8a9..605a8ede 100644 --- a/Programs/reldeps.mk +++ b/Programs/reldeps.mk @@ -1648,6 +1648,7 @@ ctb_compile.$O: $(SRC_TOP)Headers/prologue.h ctb_compile.$O: $(BLD_TOP)config.h ctb_compile.$O: $(BLD_TOP)forbuild.h ctb_compile.$O: $(SRC_TOP)Headers/log.h +ctb_compile.$O: $(SRC_TOP)Headers/parse.h ctb_compile.$O: $(SRC_TOP)Headers/file.h ctb_compile.$O: $(SRC_TOP)Headers/get_sockets.h ctb_compile.$O: $(SRC_TOP)Headers/ctb.h @@ -1659,25 +1660,63 @@ ctb_compile.$O: $(SRC_TOP)Headers/dataarea.h ctb_compile.$O: $(SRC_TOP)Headers/brl_dots.h ctb_compile.$O: $(SRC_TOP)Headers/hostcmd.h +# Dependencies for ctb_external.$O: +ctb_external.$O: $(SRC_DIR)/ctb_external.c +ctb_external.$O: $(SRC_TOP)Headers/prologue.h +ctb_external.$O: $(BLD_TOP)config.h +ctb_external.$O: $(BLD_TOP)forbuild.h +ctb_external.$O: $(SRC_TOP)Headers/log.h +ctb_external.$O: $(SRC_TOP)Headers/ctb.h +ctb_external.$O: $(SRC_TOP)Headers/ctb_types.h +ctb_external.$O: $(SRC_TOP)Headers/prefs.h +ctb_external.$O: $(SRC_DIR)/ctb_internal.h +ctb_external.$O: $(SRC_DIR)/ctb_translate.h +ctb_external.$O: $(SRC_TOP)Headers/brl_dots.h +ctb_external.$O: $(SRC_TOP)Headers/file.h +ctb_external.$O: $(SRC_TOP)Headers/get_sockets.h +ctb_external.$O: $(SRC_TOP)Headers/parse.h +ctb_external.$O: $(SRC_TOP)Headers/charset.h +ctb_external.$O: $(SRC_TOP)Headers/lock.h + +# Dependencies for ctb_louis.$O: +ctb_louis.$O: $(SRC_DIR)/ctb_louis.c +ctb_louis.$O: $(SRC_TOP)Headers/prologue.h +ctb_louis.$O: $(BLD_TOP)config.h +ctb_louis.$O: $(BLD_TOP)forbuild.h +ctb_louis.$O: $(SRC_TOP)Headers/log.h +ctb_louis.$O: $(SRC_TOP)Headers/ctb.h +ctb_louis.$O: $(SRC_TOP)Headers/ctb_types.h +ctb_louis.$O: $(SRC_TOP)Headers/prefs.h +ctb_louis.$O: $(SRC_DIR)/ctb_internal.h +ctb_louis.$O: $(SRC_DIR)/ctb_translate.h + +# Dependencies for ctb_native.$O: +ctb_native.$O: $(SRC_DIR)/ctb_native.c +ctb_native.$O: $(SRC_TOP)Headers/prologue.h +ctb_native.$O: $(BLD_TOP)config.h +ctb_native.$O: $(BLD_TOP)forbuild.h +ctb_native.$O: $(SRC_TOP)Headers/log.h +ctb_native.$O: $(SRC_TOP)Headers/ctb.h +ctb_native.$O: $(SRC_TOP)Headers/ctb_types.h +ctb_native.$O: $(SRC_TOP)Headers/prefs.h +ctb_native.$O: $(SRC_DIR)/ctb_internal.h +ctb_native.$O: $(SRC_DIR)/ctb_translate.h +ctb_native.$O: $(SRC_TOP)Headers/brl_dots.h +ctb_native.$O: $(SRC_TOP)Headers/unicode.h +ctb_native.$O: $(SRC_TOP)Headers/ascii.h + # Dependencies for ctb_translate.$O: ctb_translate.$O: $(SRC_DIR)/ctb_translate.c ctb_translate.$O: $(SRC_TOP)Headers/prologue.h ctb_translate.$O: $(BLD_TOP)config.h ctb_translate.$O: $(BLD_TOP)forbuild.h +ctb_translate.$O: $(SRC_TOP)Headers/log.h ctb_translate.$O: $(SRC_TOP)Headers/ctb.h ctb_translate.$O: $(SRC_TOP)Headers/ctb_types.h +ctb_translate.$O: $(SRC_TOP)Headers/prefs.h ctb_translate.$O: $(SRC_DIR)/ctb_internal.h +ctb_translate.$O: $(SRC_DIR)/ctb_translate.h ctb_translate.$O: $(SRC_TOP)Headers/ttb.h -ctb_translate.$O: $(SRC_TOP)Headers/prefs.h -ctb_translate.$O: $(SRC_TOP)Headers/unicode.h -ctb_translate.$O: $(SRC_TOP)Headers/charset.h -ctb_translate.$O: $(SRC_TOP)Headers/lock.h -ctb_translate.$O: $(SRC_TOP)Headers/ascii.h -ctb_translate.$O: $(SRC_TOP)Headers/brl_dots.h -ctb_translate.$O: $(SRC_TOP)Headers/log.h -ctb_translate.$O: $(SRC_TOP)Headers/file.h -ctb_translate.$O: $(SRC_TOP)Headers/get_sockets.h -ctb_translate.$O: $(SRC_TOP)Headers/parse.h # Dependencies for dataarea.$O: dataarea.$O: $(SRC_DIR)/dataarea.c @@ -1879,7 +1918,7 @@ gio_null.$O: $(SRC_TOP)Headers/io_generic.h gio_null.$O: $(SRC_TOP)Headers/serial_types.h gio_null.$O: $(SRC_TOP)Headers/usb_types.h gio_null.$O: $(SRC_DIR)/gio_internal.h -gio_null.$O: $(SRC_TOP)Headers/device.h +gio_null.$O: $(SRC_TOP)Headers/parse.h # Dependencies for gio_serial.$O: gio_serial.$O: $(SRC_DIR)/gio_serial.c @@ -2388,7 +2427,6 @@ midi_alsa.$O: $(BLD_TOP)forbuild.h midi_alsa.$O: $(SRC_TOP)Headers/log.h midi_alsa.$O: $(SRC_TOP)Headers/parse.h midi_alsa.$O: $(SRC_TOP)Headers/timing.h -midi_alsa.$O: $(SRC_TOP)Headers/dynld.h midi_alsa.$O: $(SRC_TOP)Headers/midi.h # Dependencies for midi_darwin.$O: @@ -2597,7 +2635,6 @@ pcm_alsa.$O: $(BLD_TOP)config.h pcm_alsa.$O: $(BLD_TOP)forbuild.h pcm_alsa.$O: $(SRC_TOP)Headers/log.h pcm_alsa.$O: $(SRC_TOP)Headers/timing.h -pcm_alsa.$O: $(SRC_TOP)Headers/dynld.h pcm_alsa.$O: $(SRC_TOP)Headers/pcm.h # Dependencies for pcm_android.$O: @@ -3776,6 +3813,7 @@ update.$O: $(BLD_TOP)config.h update.$O: $(BLD_TOP)forbuild.h update.$O: $(SRC_DIR)/parameters.h update.$O: $(SRC_TOP)Headers/log.h +update.$O: $(SRC_TOP)Headers/alert.h update.$O: $(SRC_TOP)Headers/report.h update.$O: $(SRC_TOP)Headers/strfmt.h update.$O: $(SRC_TOP)Headers/strfmth.h diff --git a/Programs/report.c b/Programs/report.c index a5722613..32d1ae76 100644 --- a/Programs/report.c +++ b/Programs/report.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/revision.c b/Programs/revision.c index 23266498..7d878c7d 100644 --- a/Programs/revision.c +++ b/Programs/revision.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/revision_identifier.h b/Programs/revision_identifier.h index 4741bf9f..46da1c42 100644 --- a/Programs/revision_identifier.h +++ b/Programs/revision_identifier.h @@ -1 +1 @@ -"BRLTTY-5.5" +"BRLTTY-5.6" diff --git a/Programs/routing.c b/Programs/routing.c index 0e3e718f..8edd2742 100644 --- a/Programs/routing.c +++ b/Programs/routing.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -40,7 +40,7 @@ #include "routing.h" /* - * These control the performance of cursor routing. The optimal settings + * These control the performance of cursor crd. The optimal settings * will depend heavily on system load, etc. See the documentation for * further details. * NOTE: if you try to route the cursor to an invalid place, BRLTTY won't @@ -58,22 +58,38 @@ typedef enum { typedef struct { #ifdef HAVE_SIGNAL_H - sigset_t signalMask; + struct { + sigset_t mask; + } signal; #endif /* HAVE_SIGNAL_H */ - int screenNumber; - int screenRows; - int screenColumns; - - int verticalDelta; - ScreenCharacter *rowBuffer; - - int cury, curx; - int oldy, oldx; - - long timeSum; - int timeCount; -} RoutingData; + struct { + int number; + int width; + int height; + } screen; + + struct { + int scroll; + int row; + ScreenCharacter *buffer; + } vertical; + + struct { + int column; + int row; + } current; + + struct { + int column; + int row; + } previous; + + struct { + long sum; + int count; + } time; +} CursorRoutingData; typedef enum { CURSOR_DIR_LEFT, @@ -99,181 +115,149 @@ typedef enum { CURSOR_AXIS_VERTICAL } CursorAxis; -static void -adjustHorizontalCoordinate (int *y, int *x, int amount) { - *x += amount; -} - -static void -adjustVerticalCoordinate (int *y, int *x, int amount) { - *y += amount; -} - typedef struct { const CursorDirectionEntry *forward; const CursorDirectionEntry *backward; - void (*adjustCoordinate) (int *y, int *x, int amount); } CursorAxisEntry; static const CursorAxisEntry cursorAxisTable[] = { [CURSOR_AXIS_HORIZONTAL] = { .forward = &cursorDirectionTable[CURSOR_DIR_RIGHT], - .backward = &cursorDirectionTable[CURSOR_DIR_LEFT], - .adjustCoordinate = adjustHorizontalCoordinate + .backward = &cursorDirectionTable[CURSOR_DIR_LEFT] } , [CURSOR_AXIS_VERTICAL] = { .forward = &cursorDirectionTable[CURSOR_DIR_DOWN], - .backward = &cursorDirectionTable[CURSOR_DIR_UP], - .adjustCoordinate = adjustVerticalCoordinate + .backward = &cursorDirectionTable[CURSOR_DIR_UP] } }; #define logRouting(...) logMessage(LOG_CATEGORY(CURSOR_ROUTING), __VA_ARGS__) static int -readScreenRow (RoutingData *routing, ScreenCharacter *buffer, int row) { - if (!buffer) buffer = routing->rowBuffer; - return readScreen(0, row, routing->screenColumns, 1, buffer); +readRow (CursorRoutingData *crd, ScreenCharacter *buffer, int row) { + if (!buffer) buffer = crd->vertical.buffer; + if (readScreenRow(row, crd->screen.width, buffer)) return 1; + logRouting("read failed: row=%d", row); + return 0; } static int -getCurrentPosition (RoutingData *routing) { +getCurrentPosition (CursorRoutingData *crd) { ScreenDescription description; describeScreen(&description); - if (description.number != routing->screenNumber) { - logRouting("screen changed: num=%d", description.number); - routing->screenNumber = description.number; + if (description.number != crd->screen.number) { + logRouting("screen changed: %d -> %d", crd->screen.number, description.number); + crd->screen.number = description.number; return 0; } - if (!routing->rowBuffer) { - routing->screenRows = description.rows; - routing->screenColumns = description.cols; - routing->verticalDelta = 0; + if (!crd->vertical.buffer) { + crd->screen.width = description.cols; + crd->screen.height = description.rows; + crd->vertical.scroll = 0; - if (!(routing->rowBuffer = calloc(routing->screenColumns, sizeof(*routing->rowBuffer)))) { + if (!(crd->vertical.buffer = malloc(ARRAY_SIZE(crd->vertical.buffer, crd->screen.width)))) { logMallocError(); goto error; } logRouting("screen: num=%d cols=%d rows=%d", - routing->screenNumber, - routing->screenColumns, routing->screenRows); - } else if ((routing->screenRows != description.rows) || - (routing->screenColumns != description.cols)) { - logRouting("size changed: cols=%d rows=%d", + crd->screen.number, + crd->screen.width, crd->screen.height); + } else if ((crd->screen.width != description.cols) || + (crd->screen.height != description.rows)) { + logRouting("size changed: %dx%d -> %dx%d", + crd->screen.width, crd->screen.height, description.cols, description.rows); goto error; } - routing->cury = description.posy - routing->verticalDelta; - routing->curx = description.posx; - - if (readScreenRow(routing, NULL, description.posy)) return 1; - logRouting("read failed: row=%d", description.posy); + crd->current.row = description.posy + crd->vertical.scroll; + crd->current.column = description.posx; + return 1; error: - routing->screenNumber = -1; + crd->screen.number = -1; return 0; } static void -moveCursor (RoutingData *routing, const CursorDirectionEntry *direction) { -#ifdef SIGUSR1 - sigset_t oldMask; - sigprocmask(SIG_BLOCK, &routing->signalMask, &oldMask); -#endif /* SIGUSR1 */ +handleVerticalScrolling (CursorRoutingData *crd, int direction) { + int firstRow = crd->vertical.row; + int currentRow = firstRow; - logRouting("move: %s", direction->name); - insertScreenKey(direction->key); + int bestRow = firstRow; + int bestLength = 0; -#ifdef SIGUSR1 - sigprocmask(SIG_SETMASK, &oldMask, NULL); -#endif /* SIGUSR1 */ -} + do { + ScreenCharacter buffer[crd->screen.width]; + if (!readRow(crd, buffer, currentRow)) break; -static int -awaitCursorMotion (RoutingData *routing, int direction, const CursorAxisEntry *axis) { - int moved = 0; - long int timeout = routing->timeSum / routing->timeCount; - TimeValue start; + int length; + { + int before = crd->current.column; + int after = before; - int trgy = routing->cury; - int trgx = routing->curx; + while (buffer[before].text == crd->vertical.buffer[before].text) + if (--before < 0) + break; - routing->oldy = routing->cury; - routing->oldx = routing->curx; + while (buffer[after].text == crd->vertical.buffer[after].text) + if (++after >= crd->screen.width) + break; - axis->adjustCoordinate(&trgy, &trgx, direction); - getMonotonicTime(&start); + length = after - before - 1; + } - while (1) { - long int time; - TimeValue now; + if (length > bestLength) { + bestRow = currentRow; + if ((bestLength = length) == crd->screen.width) break; + } - int oldy; - int oldx; + currentRow -= direction; + } while ((currentRow >= 0) && (currentRow < crd->screen.height)); - asyncWait(ROUTING_INTERVAL); - getMonotonicTime(&now); - time = millisecondsBetween(&start, &now) + 1; + int delta = bestRow - firstRow; + crd->vertical.scroll -= delta; + crd->current.row -= delta; +} - { - int row = routing->cury + routing->verticalDelta; - int bestRow = row; - int bestLength = 0; - - do { - ScreenCharacter buffer[routing->screenColumns]; - if (!readScreenRow(routing, buffer, row)) break; - - { - int before = routing->curx; - int after = before; - - while (buffer[before].text == routing->rowBuffer[before].text) - if (--before < 0) - break; - - while (buffer[after].text == routing->rowBuffer[after].text) - if (++after >= routing->screenColumns) - break; - - { - int length = after - before - 1; - if (length > bestLength) { - bestRow = row; - if ((bestLength = length) == routing->screenColumns) break; - } - } - } +static int +awaitCursorMotion (CursorRoutingData *crd, int direction) { + crd->previous.column = crd->current.column; + crd->previous.row = crd->current.row; - row -= direction; - } while ((row >= 0) && (row < routing->screenRows)); + TimeValue start; + getMonotonicTime(&start); - routing->verticalDelta = bestRow - routing->cury; - } + int moved = 0; + long int timeout = crd->time.sum / crd->time.count; + + while (1) { + asyncWait(ROUTING_INTERVAL); - oldy = routing->cury; - oldx = routing->curx; - if (!getCurrentPosition(routing)) return 0; + TimeValue now; + getMonotonicTime(&now); + long int time = millisecondsBetween(&start, &now) + 1; - if ((routing->cury != oldy) || (routing->curx != oldx)) { + int oldy = crd->current.row; + int oldx = crd->current.column; + if (!getCurrentPosition(crd)) return 0; + + if ((crd->current.row != oldy) || (crd->current.column != oldx)) { logRouting("moved: [%d,%d] -> [%d,%d] (%ldms)", - oldx, oldy, routing->curx, routing->cury, time); + oldx, oldy, crd->current.column, crd->current.row, time); if (!moved) { moved = 1; timeout = (time * 2) + 1; - routing->timeSum += time * 8; - routing->timeCount += 1; + crd->time.sum += time * 8; + crd->time.count += 1; } - if ((routing->cury == trgy) && (routing->curx == trgx)) break; - if (ROUTING_INTERVAL) { start = now; } else { @@ -281,21 +265,41 @@ awaitCursorMotion (RoutingData *routing, int direction, const CursorAxisEntry *a getMonotonicTime(&start); } } else if (time > timeout) { - if (!moved) logRouting("timed out: %ldms", timeout); break; } } + handleVerticalScrolling(crd, direction); + return 1; +} + +static int +moveCursor (CursorRoutingData *crd, const CursorDirectionEntry *direction) { + crd->vertical.row = crd->current.row - crd->vertical.scroll; + if (!readRow(crd, NULL, crd->vertical.row)) return 0; + +#ifdef SIGUSR1 + sigset_t oldMask; + sigprocmask(SIG_BLOCK, &crd->signal.mask, &oldMask); +#endif /* SIGUSR1 */ + + logRouting("move: %s", direction->name); + insertScreenKey(direction->key); + +#ifdef SIGUSR1 + sigprocmask(SIG_SETMASK, &oldMask, NULL); +#endif /* SIGUSR1 */ + return 1; } static RoutingResult -adjustCursorPosition (RoutingData *routing, int where, int trgy, int trgx, const CursorAxisEntry *axis) { +adjustCursorPosition (CursorRoutingData *crd, int where, int trgy, int trgx, const CursorAxisEntry *axis) { logRouting("to: [%d,%d]", trgx, trgy); while (1) { - int dify = trgy - routing->cury; - int difx = (trgx < 0)? 0: (trgx - routing->curx); + int dify = trgy - crd->current.row; + int difx = (trgx < 0)? 0: (trgx - crd->current.column); int dir; /* determine which direction the cursor needs to move in */ @@ -308,32 +312,32 @@ adjustCursorPosition (RoutingData *routing, int where, int trgy, int trgx, const } /* tell the cursor to move in the needed direction */ - moveCursor(routing, ((dir > 0)? axis->forward: axis->backward)); - if (!awaitCursorMotion(routing, dir, axis)) return CRR_FAIL; + if (!moveCursor(crd, ((dir > 0)? axis->forward: axis->backward))) return CRR_FAIL; + if (!awaitCursorMotion(crd, dir)) return CRR_FAIL; - if (routing->cury != routing->oldy) { - if (routing->oldy != trgy) { - if (((routing->cury - routing->oldy) * dir) > 0) { - int dif = trgy - routing->cury; + if (crd->current.row != crd->previous.row) { + if (crd->previous.row != trgy) { + if (((crd->current.row - crd->previous.row) * dir) > 0) { + int dif = trgy - crd->current.row; if ((dif * dify) >= 0) continue; if (where > 0) { - if (routing->cury > trgy) return CRR_NEAR; + if (crd->current.row > trgy) return CRR_NEAR; } else if (where < 0) { - if (routing->cury < trgy) return CRR_NEAR; + if (crd->current.row < trgy) return CRR_NEAR; } else { if ((dif * dif) < (dify * dify)) return CRR_NEAR; } } } - } else if (routing->curx != routing->oldx) { - if (((routing->curx - routing->oldx) * dir) > 0) { - int dif = trgx - routing->curx; - if (routing->cury != trgy) continue; + } else if (crd->current.column != crd->previous.column) { + if (((crd->current.column - crd->previous.column) * dir) > 0) { + int dif = trgx - crd->current.column; + if (crd->current.row != trgy) continue; if ((dif * difx) >= 0) continue; if (where > 0) { - if (routing->curx > trgx) return CRR_NEAR; + if (crd->current.column > trgx) return CRR_NEAR; } else if (where < 0) { - if (routing->curx < trgx) return CRR_NEAR; + if (crd->current.column < trgx) return CRR_NEAR; } else { if ((dif * dif) < (difx * difx)) return CRR_NEAR; } @@ -346,19 +350,19 @@ adjustCursorPosition (RoutingData *routing, int where, int trgy, int trgx, const * try going back to the previous position since it was obviously * the nearest ever reached. */ - moveCursor(routing, ((dir > 0)? axis->backward: axis->forward)); - return awaitCursorMotion(routing, -dir, axis)? CRR_NEAR: CRR_FAIL; + if (!moveCursor(crd, ((dir > 0)? axis->backward: axis->forward))) return CRR_FAIL; + return awaitCursorMotion(crd, -dir)? CRR_NEAR: CRR_FAIL; } } static RoutingResult -adjustCursorHorizontally (RoutingData *routing, int where, int row, int column) { - return adjustCursorPosition(routing, where, row, column, &cursorAxisTable[CURSOR_AXIS_HORIZONTAL]); +adjustCursorHorizontally (CursorRoutingData *crd, int where, int row, int column) { + return adjustCursorPosition(crd, where, row, column, &cursorAxisTable[CURSOR_AXIS_HORIZONTAL]); } static RoutingResult -adjustCursorVertically (RoutingData *routing, int where, int row) { - return adjustCursorPosition(routing, where, row, -1, &cursorAxisTable[CURSOR_AXIS_VERTICAL]); +adjustCursorVertically (CursorRoutingData *crd, int where, int row) { + return adjustCursorPosition(crd, where, row, -1, &cursorAxisTable[CURSOR_AXIS_VERTICAL]); } typedef struct { @@ -369,32 +373,32 @@ typedef struct { static RoutingStatus routeCursor (const RoutingParameters *parameters) { - RoutingData routing; + CursorRoutingData crd; #ifdef SIGUSR1 /* Set up the signal mask. */ - sigemptyset(&routing.signalMask); - sigaddset(&routing.signalMask, SIGUSR1); - sigprocmask(SIG_UNBLOCK, &routing.signalMask, NULL); + sigemptyset(&crd.signal.mask); + sigaddset(&crd.signal.mask, SIGUSR1); + sigprocmask(SIG_UNBLOCK, &crd.signal.mask, NULL); #endif /* SIGUSR1 */ /* initialize the routing data structure */ - routing.screenNumber = parameters->screen; - routing.rowBuffer = NULL; - routing.timeSum = ROUTING_TIMEOUT; - routing.timeCount = 1; + crd.screen.number = parameters->screen; + crd.vertical.buffer = NULL; + crd.time.sum = ROUTING_TIMEOUT; + crd.time.count = 1; - if (getCurrentPosition(&routing)) { - logRouting("from: [%d,%d]", routing.curx, routing.cury); + if (getCurrentPosition(&crd)) { + logRouting("from: [%d,%d]", crd.current.column, crd.current.row); if (parameters->column < 0) { - adjustCursorVertically(&routing, 0, parameters->row); + adjustCursorVertically(&crd, 0, parameters->row); } else { - if (adjustCursorVertically(&routing, -1, parameters->row) != CRR_FAIL) { - if (adjustCursorHorizontally(&routing, 0, parameters->row, parameters->column) == CRR_NEAR) { - if (routing.cury < parameters->row) { - if (adjustCursorVertically(&routing, 1, routing.cury+1) != CRR_FAIL) { - adjustCursorHorizontally(&routing, 0, parameters->row, parameters->column); + if (adjustCursorVertically(&crd, -1, parameters->row) != CRR_FAIL) { + if (adjustCursorHorizontally(&crd, 0, parameters->row, parameters->column) == CRR_NEAR) { + if (crd.current.row < parameters->row) { + if (adjustCursorVertically(&crd, 1, crd.current.row+1) != CRR_FAIL) { + adjustCursorHorizontally(&crd, 0, parameters->row, parameters->column); } } } @@ -402,11 +406,11 @@ routeCursor (const RoutingParameters *parameters) { } } - if (routing.rowBuffer) free(routing.rowBuffer); + if (crd.vertical.buffer) free(crd.vertical.buffer); - if (routing.screenNumber != parameters->screen) return ROUTING_ERROR; - if (routing.cury != parameters->row) return ROUTING_WRONG_ROW; - if ((parameters->column >= 0) && (routing.curx != parameters->column)) return ROUTING_WRONG_COLUMN; + if (crd.screen.number != parameters->screen) return ROUTING_ERROR; + if (crd.current.row != parameters->row) return ROUTING_WRONG_ROW; + if ((parameters->column >= 0) && (crd.current.column != parameters->column)) return ROUTING_WRONG_COLUMN; return ROUTING_DONE; } diff --git a/Programs/routing.h b/Programs/routing.h index b2e010f6..17536b6d 100644 --- a/Programs/routing.h +++ b/Programs/routing.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr.c b/Programs/scr.c index 00200e08..fa06caa2 100644 --- a/Programs/scr.c +++ b/Programs/scr.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr.h b/Programs/scr.h index 1666b032..5664a4f7 100644 --- a/Programs/scr.h +++ b/Programs/scr.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -47,6 +47,16 @@ extern int userVirtualTerminal (int number); extern int handleScreenCommands (int command, void *data); extern KeyTableCommandContext getScreenCommandContext (void); +static inline int +readScreenRows (int row, int width, int height, ScreenCharacter *buffer) { + return readScreen(0, row, width, height, buffer); +} + +static inline int +readScreenRow (int row, int width, ScreenCharacter *buffer) { + return readScreenRows(row, width, 1, buffer); +} + /* Routines which apply to the routing screen. * An extra `thread' for the cursor routing subprocess. * This is needed because the forked subprocess shares its parent's diff --git a/Programs/scr_base.c b/Programs/scr_base.c index afb3caa1..75b81e99 100644 --- a/Programs/scr_base.c +++ b/Programs/scr_base.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_driver.c b/Programs/scr_driver.c index 0b2b5ca6..da9a0368 100644 --- a/Programs/scr_driver.c +++ b/Programs/scr_driver.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_frozen.c b/Programs/scr_frozen.c index 14c0a9fb..eda1243a 100644 --- a/Programs/scr_frozen.c +++ b/Programs/scr_frozen.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -45,9 +45,9 @@ ASYNC_ALARM_CALLBACK(handleFreezeReminderAlarm) { static int startFreezeReminderAlarm (void) { if (freezeReminderAlarm) return 1; - return asyncSetAlarmIn(&freezeReminderAlarm, - SCREEN_FREEZE_REMINDER_INTERVAL, - handleFreezeReminderAlarm, NULL); + return asyncNewRelativeAlarm(&freezeReminderAlarm, + SCREEN_FREEZE_REMINDER_INTERVAL, + handleFreezeReminderAlarm, NULL); } static void diff --git a/Programs/scr_frozen.h b/Programs/scr_frozen.h index ca4b8eff..525220e6 100644 --- a/Programs/scr_frozen.h +++ b/Programs/scr_frozen.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_gpm.c b/Programs/scr_gpm.c index 15d9687e..a2648e05 100644 --- a/Programs/scr_gpm.c +++ b/Programs/scr_gpm.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -62,7 +62,7 @@ gpmOpenConnection (void) { if (Gpm_Open(&options, -1) == -1) { logMessage(LOG_DEBUG, "GPM open error: %s", strerror(errno)); - asyncSetAlarmIn(NULL, GPM_CONNECTION_RESET_DELAY, gpmResetConnection, NULL); + asyncNewRelativeAlarm(NULL, GPM_CONNECTION_RESET_DELAY, gpmResetConnection, NULL); gpmConnectionState = GCS_FAILED; return 0; } diff --git a/Programs/scr_help.c b/Programs/scr_help.c index 568e0d51..9d09d1bf 100644 --- a/Programs/scr_help.c +++ b/Programs/scr_help.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_help.h b/Programs/scr_help.h index a883d452..c5dc6a3c 100644 --- a/Programs/scr_help.h +++ b/Programs/scr_help.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_internal.h b/Programs/scr_internal.h index f3417fe8..b3043a96 100644 --- a/Programs/scr_internal.h +++ b/Programs/scr_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_main.c b/Programs/scr_main.c index fc8cbac4..37560cfd 100644 --- a/Programs/scr_main.c +++ b/Programs/scr_main.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_menu.c b/Programs/scr_menu.c index d2895a09..7f96aa90 100644 --- a/Programs/scr_menu.c +++ b/Programs/scr_menu.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_menu.h b/Programs/scr_menu.h index 539adf05..ce65c866 100644 --- a/Programs/scr_menu.h +++ b/Programs/scr_menu.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_real.c b/Programs/scr_real.c index 3639e563..d6b2db3b 100644 --- a/Programs/scr_real.c +++ b/Programs/scr_real.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_special.c b/Programs/scr_special.c index 484589f0..b3fb99dd 100644 --- a/Programs/scr_special.c +++ b/Programs/scr_special.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_special.h b/Programs/scr_special.h index 25caaa84..dc71fd75 100644 --- a/Programs/scr_special.h +++ b/Programs/scr_special.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scr_utils.c b/Programs/scr_utils.c index 59d70f5c..84e0ef3c 100644 --- a/Programs/scr_utils.c +++ b/Programs/scr_utils.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/scrtest.c b/Programs/scrtest.c index 64fe009e..9f689708 100644 --- a/Programs/scrtest.c +++ b/Programs/scrtest.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial.c b/Programs/serial.c index c17837b8..51b7184b 100644 --- a/Programs/serial.c +++ b/Programs/serial.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -866,12 +866,12 @@ serialGetStream (SerialDevice *serial) { } int -isSerialDevice (const char **identifier) { +isSerialDeviceIdentifier (const char **identifier) { #ifdef ALLOW_DOS_DEVICE_NAMES if (isDosDevice(*identifier, "COM")) return 1; #endif /* ALLOW_DOS_DEVICE_NAMES */ - if (isQualifiedDevice(identifier, "serial")) return 1; - if (isUnqualifiedDevice(*identifier)) return 1; + if (hasQualifier(identifier, "serial")) return 1; + if (hasNoQualifier(*identifier)) return 1; return 0; } diff --git a/Programs/serial_grub.c b/Programs/serial_grub.c index a82c2338..5dd6b535 100644 --- a/Programs/serial_grub.c +++ b/Programs/serial_grub.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_grub.h b/Programs/serial_grub.h index e742630f..42e3cb3b 100644 --- a/Programs/serial_grub.h +++ b/Programs/serial_grub.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_internal.h b/Programs/serial_internal.h index 1af3f6b6..23b68ad9 100644 --- a/Programs/serial_internal.h +++ b/Programs/serial_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_msdos.c b/Programs/serial_msdos.c index 640317b7..431fa224 100644 --- a/Programs/serial_msdos.c +++ b/Programs/serial_msdos.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_msdos.h b/Programs/serial_msdos.h index 40ed97f6..0710f72f 100644 --- a/Programs/serial_msdos.h +++ b/Programs/serial_msdos.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_none.c b/Programs/serial_none.c index 4b9a9b38..130d74f6 100644 --- a/Programs/serial_none.c +++ b/Programs/serial_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_none.h b/Programs/serial_none.h index b03b2bcd..650796d8 100644 --- a/Programs/serial_none.h +++ b/Programs/serial_none.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_termios.c b/Programs/serial_termios.c index ec55fcc0..49de58fd 100644 --- a/Programs/serial_termios.c +++ b/Programs/serial_termios.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_termios.h b/Programs/serial_termios.h index 7b87ade2..73924ff4 100644 --- a/Programs/serial_termios.h +++ b/Programs/serial_termios.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_uart.h b/Programs/serial_uart.h index 2879b26a..28dae275 100644 --- a/Programs/serial_uart.h +++ b/Programs/serial_uart.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_windows.c b/Programs/serial_windows.c index b5549491..dfafcda8 100644 --- a/Programs/serial_windows.c +++ b/Programs/serial_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/serial_windows.h b/Programs/serial_windows.h index 14b18690..0fc423e2 100644 --- a/Programs/serial_windows.h +++ b/Programs/serial_windows.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/service_libsystemd.c b/Programs/service_libsystemd.c index 60b88d4d..3286cf7d 100644 --- a/Programs/service_libsystemd.c +++ b/Programs/service_libsystemd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/service_none.c b/Programs/service_none.c index 16a9e8e1..92907fb2 100644 --- a/Programs/service_none.c +++ b/Programs/service_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/service_windows.c b/Programs/service_windows.c index bbfccf36..60468d71 100644 --- a/Programs/service_windows.c +++ b/Programs/service_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ses.c b/Programs/ses.c index 5ef58d71..87f6e54b 100644 --- a/Programs/ses.c +++ b/Programs/ses.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ses.h b/Programs/ses.h index a052d805..535fefe4 100644 --- a/Programs/ses.h +++ b/Programs/ses.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spk.c b/Programs/spk.c index 8cc761b2..9ce0437a 100644 --- a/Programs/spk.c +++ b/Programs/spk.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spk_base.c b/Programs/spk_base.c index 8bbacc29..b6c2ce95 100644 --- a/Programs/spk_base.c +++ b/Programs/spk_base.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spk_driver.c b/Programs/spk_driver.c index 7c125df9..b3a2f48b 100644 --- a/Programs/spk_driver.c +++ b/Programs/spk_driver.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spk_input.c b/Programs/spk_input.c index 1f9c1347..81fd1bc3 100644 --- a/Programs/spk_input.c +++ b/Programs/spk_input.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spk_input.h b/Programs/spk_input.h index 34fd2718..52599bfb 100644 --- a/Programs/spk_input.h +++ b/Programs/spk_input.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spk_thread.c b/Programs/spk_thread.c index 385eaf4d..ce59035a 100644 --- a/Programs/spk_thread.c +++ b/Programs/spk_thread.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spk_thread.h b/Programs/spk_thread.h index 8ce706bc..db85b46a 100644 --- a/Programs/spk_thread.h +++ b/Programs/spk_thread.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/spktest.c b/Programs/spktest.c index ddfd58de..dec61d0c 100644 --- a/Programs/spktest.c +++ b/Programs/spktest.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/status.c b/Programs/status.c index 445d33a4..ad706ca5 100644 --- a/Programs/status.c +++ b/Programs/status.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/status.h b/Programs/status.h index 9a66d600..ff1d0a36 100644 --- a/Programs/status.h +++ b/Programs/status.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/sys_darwin.c b/Programs/sys_darwin.c index 0acc2db5..d8ebd876 100644 --- a/Programs/sys_darwin.c +++ b/Programs/sys_darwin.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/sys_freebsd.c b/Programs/sys_freebsd.c index cb71ab8d..9b714cc1 100644 --- a/Programs/sys_freebsd.c +++ b/Programs/sys_freebsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/sys_kfreebsd.c b/Programs/sys_kfreebsd.c index cb71ab8d..9b714cc1 100644 --- a/Programs/sys_kfreebsd.c +++ b/Programs/sys_kfreebsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/sys_netbsd.c b/Programs/sys_netbsd.c index 50d8e1ff..f6beb5fc 100644 --- a/Programs/sys_netbsd.c +++ b/Programs/sys_netbsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/sys_openbsd.c b/Programs/sys_openbsd.c index 50d8e1ff..f6beb5fc 100644 --- a/Programs/sys_openbsd.c +++ b/Programs/sys_openbsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/sys_solaris.c b/Programs/sys_solaris.c index 84cb2570..b3a06ab1 100644 --- a/Programs/sys_solaris.c +++ b/Programs/sys_solaris.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/system_darwin.c b/Programs/system_darwin.c index 01d77e41..c1723c29 100644 --- a/Programs/system_darwin.c +++ b/Programs/system_darwin.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/system_java.c b/Programs/system_java.c index 0dcf3521..f844681b 100644 --- a/Programs/system_java.c +++ b/Programs/system_java.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/system_linux.c b/Programs/system_linux.c index d46ec790..43e36e3b 100644 --- a/Programs/system_linux.c +++ b/Programs/system_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/system_msdos.c b/Programs/system_msdos.c index d0855d1f..1496162a 100644 --- a/Programs/system_msdos.c +++ b/Programs/system_msdos.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/system_none.c b/Programs/system_none.c index 307b688d..acf83e5a 100644 --- a/Programs/system_none.c +++ b/Programs/system_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/system_windows.c b/Programs/system_windows.c index bd761275..19131257 100644 --- a/Programs/system_windows.c +++ b/Programs/system_windows.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/tbl2hex.c b/Programs/tbl2hex.c index d4786a4c..224e53bb 100644 --- a/Programs/tbl2hex.c +++ b/Programs/tbl2hex.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -251,3 +251,20 @@ main (int argc, char *argv[]) { return exitStatus; } + +#include "ctb_internal.h" + +const ContractionTableTranslationMethods * +getContractionTableTranslationMethods_native (void) { + return NULL; +} + +const ContractionTableTranslationMethods * +getContractionTableTranslationMethods_external (void) { + return NULL; +} + +const ContractionTableTranslationMethods * +getContractionTableTranslationMethods_louis (void) { + return NULL; +} diff --git a/Programs/thread.c b/Programs/thread.c index c07fdca5..7b91abf7 100644 --- a/Programs/thread.c +++ b/Programs/thread.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/timing.c b/Programs/timing.c index 2e7269d4..765a6256 100644 --- a/Programs/timing.c +++ b/Programs/timing.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ttb_compile.c b/Programs/ttb_compile.c index d11b2587..d0479369 100644 --- a/Programs/ttb_compile.c +++ b/Programs/ttb_compile.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ttb_compile.h b/Programs/ttb_compile.h index 4fe1240d..cd96f8c4 100644 --- a/Programs/ttb_compile.h +++ b/Programs/ttb_compile.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ttb_gnome.c b/Programs/ttb_gnome.c index 2f6a3176..06968621 100644 --- a/Programs/ttb_gnome.c +++ b/Programs/ttb_gnome.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ttb_internal.h b/Programs/ttb_internal.h index f2c656f4..030ad99d 100644 --- a/Programs/ttb_internal.h +++ b/Programs/ttb_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ttb_louis.c b/Programs/ttb_louis.c index 29e92a8f..7f5d5854 100644 --- a/Programs/ttb_louis.c +++ b/Programs/ttb_louis.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ttb_native.c b/Programs/ttb_native.c index ed44553c..40a58406 100644 --- a/Programs/ttb_native.c +++ b/Programs/ttb_native.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/ttb_translate.c b/Programs/ttb_translate.c index c89e42ce..3e1e348d 100644 --- a/Programs/ttb_translate.c +++ b/Programs/ttb_translate.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/tune.c b/Programs/tune.c index d8e4e224..cafbb072 100644 --- a/Programs/tune.c +++ b/Programs/tune.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -76,7 +76,7 @@ openTuneDevice (void) { if (noteMethods) { if ((noteDevice = noteMethods->construct(openErrorLevel)) != NULL) { - asyncSetAlarmIn(&tuneDeviceCloseTimer, timeout, handleTuneDeviceCloseTimeout, NULL); + asyncNewRelativeAlarm(&tuneDeviceCloseTimer, timeout, handleTuneDeviceCloseTimeout, NULL); return 1; } } diff --git a/Programs/tune_build.c b/Programs/tune_build.c index cec94947..8a5a6218 100644 --- a/Programs/tune_build.c +++ b/Programs/tune_build.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/tune_utils.c b/Programs/tune_utils.c index 344b714a..ff880668 100644 --- a/Programs/tune_utils.c +++ b/Programs/tune_utils.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/unicode.c b/Programs/unicode.c index e0ee1fb0..e898d734 100644 --- a/Programs/unicode.c +++ b/Programs/unicode.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/update.c b/Programs/update.c index 80595310..4b4c7b1d 100644 --- a/Programs/update.c +++ b/Programs/update.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -23,6 +23,7 @@ #include "parameters.h" #include "log.h" +#include "alert.h" #include "report.h" #include "strfmt.h" #include "update.h" @@ -305,6 +306,81 @@ showInfo (void) { return writeBrailleText(mode, text); } +static int +saveScreenCharacters ( + ScreenCharacter **buffer, size_t *size, + const ScreenCharacter *characters, size_t count +) { + size_t newSize = count * sizeof(*characters); + + if (newSize > *size) { + ScreenCharacter *newBuffer = malloc(newSize); + + if (!newBuffer) { + logMallocError(); + return 0; + } + + if (*buffer) free(*buffer); + *buffer = newBuffer; + *size = newSize; + } + + memcpy(*buffer, characters, newSize); + return 1; +} + +static void +checkScreenScroll (int track) { + const int rowCount = 3; + + static int oldScreen = -1; + static int oldRow = -1; + static int oldWidth = 0; + static size_t oldSize = 0; + static ScreenCharacter *oldCharacters = NULL; + + int newScreen = scr.number; + int newWidth = scr.cols; + size_t newCount = newWidth * rowCount; + ScreenCharacter newCharacters[newCount]; + + int newRow = ses->winy; + int newTop = newRow - (rowCount - 1); + + if (newTop < 0) { + newCount = 0; + } else { + readScreenRows(newTop, newWidth, rowCount, newCharacters); + + if (track && prefs.trackScreenScroll && oldCharacters && + (newScreen == oldScreen) && (newWidth == oldWidth) && + (newRow == oldRow)) { + while (newTop > 0) { + if ((scr.posy >= newTop) && (scr.posy <= newRow)) break; + + if (isSameRow(oldCharacters, newCharacters, newCount, isSameCharacter)) { + if (newRow != ses->winy) { + ses->winy = newRow; + alert(ALERT_SCROLL_UP); + } + + break; + } + + readScreenRows(--newTop, newWidth, rowCount, newCharacters); + newRow -= 1; + } + } + } + + if (saveScreenCharacters(&oldCharacters, &oldSize, newCharacters, newCount)) { + oldScreen = newScreen; + oldRow = ses->winy; + oldWidth = newWidth; + } +} + #ifdef ENABLE_SPEECH_SUPPORT static int wasAutospeaking; @@ -324,7 +400,7 @@ autospeak (AutospeakMode mode) { int newWidth = scr.cols; ScreenCharacter newCharacters[newWidth]; - readScreen(0, ses->winy, newWidth, 1, newCharacters); + readScreenRow(ses->winy, newWidth, newCharacters); if (!spk.track.isActive) { const ScreenCharacter *characters = newCharacters; @@ -517,29 +593,13 @@ autospeak (AutospeakMode mode) { } } - { - size_t newSize = newWidth * sizeof(*oldCharacters); - - if (newSize > oldSize) { - ScreenCharacter *newBuffer = malloc(newSize); - - if (!newBuffer) { - logMallocError(); - return; - } - - oldCharacters = newBuffer; - oldSize = newSize; - } - - memcpy(oldCharacters, newCharacters, newSize); + if (saveScreenCharacters(&oldCharacters, &oldSize, newCharacters, newWidth)) { + oldScreen = newScreen; + oldX = newX; + oldY = newY; + oldWidth = newWidth; + cursorAssumedStable = 0; } - - oldScreen = newScreen; - oldX = newX; - oldY = newY; - oldWidth = newWidth; - cursorAssumedStable = 0; } void @@ -581,8 +641,6 @@ writeBrailleWindow (BrailleDisplay *brl, const wchar_t *text) { static void doUpdate (void) { - int screenPointerMoved = 0; - logMessage(LOG_CATEGORY(UPDATE_EVENTS), "starting"); unrequireAllBlinkDescriptors(); refreshScreen(); @@ -621,6 +679,9 @@ doUpdate (void) { } } + int screenPointerHasMoved = 0; + int trackScreenScroll = 0; + if (ses->trackScreenCursor) { #ifdef ENABLE_SPEECH_SUPPORT if (!spk.track.isActive) @@ -638,25 +699,33 @@ doUpdate (void) { } /* If the cursor moves in cursor tracking mode: */ - if (!isRouting() && (scr.posx != ses->trkx || scr.posy != ses->trky)) { - int oldx = ses->winx; - int oldy = ses->winy; - - trackScreenCursor(0); - logMessage(LOG_CATEGORY(CURSOR_TRACKING), - "scr=%u csr=[%u,%u]->[%u,%u] win=[%u,%u]->[%u,%u]", - scr.number, - ses->trkx, ses->trky, scr.posx, scr.posy, - oldx, oldy, ses->winx, ses->winy); - - ses->spkx = ses->trkx = scr.posx; - ses->spky = ses->trky = scr.posy; - } else if (checkScreenPointer()) { - screenPointerMoved = 1; + if (!isRouting()) { + if ((scr.posx != ses->trkx) || (scr.posy != ses->trky)) { + int oldx = ses->winx; + int oldy = ses->winy; + + trackScreenCursor(0); + logMessage(LOG_CATEGORY(CURSOR_TRACKING), + "scr=%u csr=[%u,%u]->[%u,%u] win=[%u,%u]->[%u,%u]", + scr.number, + ses->trkx, ses->trky, scr.posx, scr.posy, + oldx, oldy, ses->winx, ses->winy); + + ses->spkx = ses->trkx = scr.posx; + ses->spky = ses->trky = scr.posy; + } else if (checkScreenPointer()) { + screenPointerHasMoved = 1; + } else { + trackScreenScroll = 1; + } } } + } else { + trackScreenScroll = 1; } + checkScreenScroll(trackScreenScroll); + #ifdef ENABLE_SPEECH_SUPPORT if (spk.canAutospeak) { int isAutospeaking = isAutospeakActive(); @@ -673,7 +742,7 @@ doUpdate (void) { /* There are a few things to take care of if the display has moved. */ if ((ses->winx != oldwinx) || (ses->winy != oldwiny)) { - if (!screenPointerMoved) highlightBrailleWindowLocation(); + if (!screenPointerHasMoved) highlightBrailleWindowLocation(); /* Attributes are blinking. * We could check to see if we changed screen, but that doesn't @@ -819,9 +888,15 @@ doUpdate (void) { #endif /* ENABLE_CONTRACTED_BRAILLE */ { int windowColumns = MIN(textCount, scr.cols-ses->winx); - ScreenCharacter characters[textLength]; + ScreenCharacter characters[textLength]; readScreen(ses->winx, ses->winy, windowColumns, brl.textRows, characters); + + if (prefs.wordWrap) { + int columns = getWordWrapLength(ses->winy, ses->winx, windowColumns); + if (columns < windowColumns) windowColumns = columns; + } + if (windowColumns < textCount) { /* We got a rectangular piece of text with readScreen but the display * is in an off-right position with some cells at the end blank @@ -1015,7 +1090,7 @@ ASYNC_ALARM_CALLBACK(handleUpdateAlarm) { static void setUpdateAlarm (void) { if (!updateSuspendCount && !updateAlarm) { - asyncSetAlarmTo(&updateAlarm, &updateTime, handleUpdateAlarm, NULL); + asyncNewAbsoluteAlarm(&updateAlarm, &updateTime, handleUpdateAlarm, NULL); } } diff --git a/Programs/update.h b/Programs/update.h index bf5fd35f..4c8cb2c2 100644 --- a/Programs/update.h +++ b/Programs/update.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb.c b/Programs/usb.c index 4ffb49e5..7a52cf40 100644 --- a/Programs/usb.c +++ b/Programs/usb.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -1119,8 +1119,8 @@ usbSchedulePendingInputRequest (UsbEndpoint *endpoint) { if (!*delay) *delay = 1; *delay = MIN(*delay, USB_INPUT_INTERRUPT_DELAY_MAXIMUM); - asyncSetAlarmIn(&endpoint->direction.input.pending.alarm, *delay, - usbHandleSchedulePendingInputRequest, endpoint); + asyncNewRelativeAlarm(&endpoint->direction.input.pending.alarm, *delay, + usbHandleSchedulePendingInputRequest, endpoint); *delay += 1; } @@ -1640,6 +1640,6 @@ usbCloseChannel (UsbChannel *channel) { } int -isUsbDevice (const char **identifier) { - return isQualifiedDevice(identifier, "usb"); +isUsbDeviceIdentifier (const char **identifier) { + return hasQualifier(identifier, "usb"); } diff --git a/Programs/usb_adapters.c b/Programs/usb_adapters.c index 7e7bb72a..02030053 100644 --- a/Programs/usb_adapters.c +++ b/Programs/usb_adapters.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_adapters.h b/Programs/usb_adapters.h index 33c63056..b5806447 100644 --- a/Programs/usb_adapters.h +++ b/Programs/usb_adapters.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_android.c b/Programs/usb_android.c index 6515b20e..8ef0e83e 100644 --- a/Programs/usb_android.c +++ b/Programs/usb_android.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_belkin.c b/Programs/usb_belkin.c index 23a02a26..ed4c1bbc 100644 --- a/Programs/usb_belkin.c +++ b/Programs/usb_belkin.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_belkin.h b/Programs/usb_belkin.h index 475d3434..fca3f743 100644 --- a/Programs/usb_belkin.h +++ b/Programs/usb_belkin.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_bsd.h b/Programs/usb_bsd.h index b106e135..c073e21d 100644 --- a/Programs/usb_bsd.h +++ b/Programs/usb_bsd.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_cdc_acm.c b/Programs/usb_cdc_acm.c index f9d1d04e..42d557ca 100644 --- a/Programs/usb_cdc_acm.c +++ b/Programs/usb_cdc_acm.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_cdc_acm.h b/Programs/usb_cdc_acm.h index 388faa01..c15e7fc6 100644 --- a/Programs/usb_cdc_acm.h +++ b/Programs/usb_cdc_acm.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_cp2101.c b/Programs/usb_cp2101.c index 9a3229c8..7df7b2a2 100644 --- a/Programs/usb_cp2101.c +++ b/Programs/usb_cp2101.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_cp2101.h b/Programs/usb_cp2101.h index 26d587cf..e2c114d1 100644 --- a/Programs/usb_cp2101.h +++ b/Programs/usb_cp2101.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_cp2110.c b/Programs/usb_cp2110.c index 133c39e7..7dd4510b 100644 --- a/Programs/usb_cp2110.c +++ b/Programs/usb_cp2110.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_cp2110.h b/Programs/usb_cp2110.h index c05aba0e..6969914c 100644 --- a/Programs/usb_cp2110.h +++ b/Programs/usb_cp2110.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_darwin.c b/Programs/usb_darwin.c index fa4819eb..6b708c82 100644 --- a/Programs/usb_darwin.c +++ b/Programs/usb_darwin.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_freebsd.c b/Programs/usb_freebsd.c index 6645a149..96d50603 100644 --- a/Programs/usb_freebsd.c +++ b/Programs/usb_freebsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_ftdi.c b/Programs/usb_ftdi.c index 1f55ed67..19e52c58 100644 --- a/Programs/usb_ftdi.c +++ b/Programs/usb_ftdi.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_ftdi.h b/Programs/usb_ftdi.h index d48eefb7..877b55b8 100644 --- a/Programs/usb_ftdi.h +++ b/Programs/usb_ftdi.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_grub.c b/Programs/usb_grub.c index be1a0b3f..2bf84bd8 100644 --- a/Programs/usb_grub.c +++ b/Programs/usb_grub.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_hid.c b/Programs/usb_hid.c index 80662e15..f044230a 100644 --- a/Programs/usb_hid.c +++ b/Programs/usb_hid.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_internal.h b/Programs/usb_internal.h index e41f2066..335841a9 100644 --- a/Programs/usb_internal.h +++ b/Programs/usb_internal.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_kfreebsd.c b/Programs/usb_kfreebsd.c index 95a8a938..c4235fec 100644 --- a/Programs/usb_kfreebsd.c +++ b/Programs/usb_kfreebsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_libusb-1.0.c b/Programs/usb_libusb-1.0.c index 00377cd6..8b3a5f6f 100644 --- a/Programs/usb_libusb-1.0.c +++ b/Programs/usb_libusb-1.0.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_libusb.c b/Programs/usb_libusb.c index 295a58cc..aa36d6d6 100644 --- a/Programs/usb_libusb.c +++ b/Programs/usb_libusb.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_linux.c b/Programs/usb_linux.c index 9d33acfd..b10ac09d 100644 --- a/Programs/usb_linux.c +++ b/Programs/usb_linux.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_netbsd.c b/Programs/usb_netbsd.c index 7c692d19..0bf8f9e4 100644 --- a/Programs/usb_netbsd.c +++ b/Programs/usb_netbsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_none.c b/Programs/usb_none.c index be1a0b3f..2bf84bd8 100644 --- a/Programs/usb_none.c +++ b/Programs/usb_none.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_openbsd.c b/Programs/usb_openbsd.c index 7c692d19..0bf8f9e4 100644 --- a/Programs/usb_openbsd.c +++ b/Programs/usb_openbsd.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_serial.c b/Programs/usb_serial.c index 8b811853..ad292ca6 100644 --- a/Programs/usb_serial.c +++ b/Programs/usb_serial.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_serial.h b/Programs/usb_serial.h index 7e11888e..d0f49f63 100644 --- a/Programs/usb_serial.h +++ b/Programs/usb_serial.h @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/usb_solaris.c b/Programs/usb_solaris.c index 3d8e79fa..7a2c6860 100644 --- a/Programs/usb_solaris.c +++ b/Programs/usb_solaris.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/variables.c b/Programs/variables.c index 25828b42..9ff0b0af 100644 --- a/Programs/variables.c +++ b/Programs/variables.c @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * diff --git a/Programs/xbrlapi.c b/Programs/xbrlapi.c index d6b83f36..038761bf 100644 --- a/Programs/xbrlapi.c +++ b/Programs/xbrlapi.c @@ -1,14 +1,14 @@ /* * XBrlAPI - A background process tinkering with X for proper BrlAPI behavior * - * Copyright (C) 2003-2017 by Samuel Thibault + * Copyright (C) 2003-2018 by Samuel Thibault * * XBrlAPI comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -351,7 +351,7 @@ static struct window *window_of_Window(Window win) { static int del_window(Window win) { struct window **pred; struct window *cur; - + for (pred=&WINHASH(win); cur = *pred, cur && cur->win!=win; pred=&cur->next); if (cur) { @@ -863,7 +863,7 @@ static void toX_f(const char *display) { } /****************************************************************************** - * main + * main */ static void term_handler(int foo) { diff --git a/README b/README index 493494c4..5fcd8c22 100644 --- a/README +++ b/README @@ -2,51 +2,21 @@ BRLTTY is a background process (daemon) providing access to the Linux/Unix console (when in text mode) for a blind person using a refreshable braille display. -Version 5.5, Apr 2017 +Version 5.6, Feb 2018 -Copyright (C) 1995-2017 by The BRLTTY Developers. +Copyright (C) 1995-2018 by The BRLTTY Developers. Web Page: http://brltty.com/ BRLTTY is free software. It comes with ABSOLUTELY NO WARRANTY. -BRLTTY is placed under the terms of the GNU General Public License [GPL] as -published by the Free Software Foundation; see the file LICENSE-GPL for -details. Version 2 (or any later version) of the GPL may be used when +BRLTTY is placed under the terms of the GNU Lesser General Public License +[LGPL] as published by the Free Software Foundation; see the file LICENSE-LGPL +for details. Version 2.1 (or any later version) of the LGPL may be used when redistributing and/or modifying this software. This statement applies to all the files contained within this directory structure except for those which are explicitly listed as exceptions within the following paragraphs. -A special exception has been made for all of the text, attributes, and -contraction tables and subtables (which reside within the Tables/ -subdirectory). They are placed under the terms of the GNU Lesser General Public -License [LGPL] as published by the Free Software Foundation; see the file -LICENSE-LGPL for details. Version 2.1 (or any later version) of the LGPL may be -used when redistributing and/or modifying these files. The files covered by -this special exception are: - - *.ttb - *.tti - *.atb - *.ati - *.ctb - *.cti - -A special exception has been made for those files which are part of the client -side of BrlAPI (BRLTTY's Application Programming Interface). They are placed -under the terms of the GNU Lesser General Public License [LGPL] as published by -the Free Software Foundation; see the file LICENSE-LGPL for details. Version -2.1 (or any later version) of the LGPL may be used when redistributing and/or -modifying these files. The files covered by this special exception are: - - brlapi.h.in - brlapi_keycodes.h - brlapi_protocol.h - brlapi_client.c - brlapi_common.h - brldefs-ht.h - brldefs-vs.h - This software is maintained by: Dave Mielke The members of The BRLTTY Team are: @@ -208,7 +178,8 @@ The following braille displays are supported: Connect Braille 40, Bookworm] - Hedo [ProfiLine, MobilLine] - HIMS [Braille Sense, SyncBraille, Braille Edge, Smart Beetle] -- HumanWare [Brailliant 32/40/80 bi] +- HumanWare [Brailliant BI 14/32/40, Brailliant B 80, BrailleNote Touch] +- Inceptor [BrailleMe] - Iris - Libbraille - LogText [32] diff --git a/Tables/Attributes/invleft_right.atb b/Tables/Attributes/invleft_right.atb index ae102f8d..2421ee44 100644 --- a/Tables/Attributes/invleft_right.atb +++ b/Tables/Attributes/invleft_right.atb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Attributes/left_right.atb b/Tables/Attributes/left_right.atb index bb2adaab..90d956c6 100644 --- a/Tables/Attributes/left_right.atb +++ b/Tables/Attributes/left_right.atb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Attributes/upper_lower.atb b/Tables/Attributes/upper_lower.atb index bd60ef0e..1bb874e2 100644 --- a/Tables/Attributes/upper_lower.atb +++ b/Tables/Attributes/upper_lower.atb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/af.ctb b/Tables/Contraction/af.ctb index f11fe254..daec5738 100644 --- a/Tables/Contraction/af.ctb +++ b/Tables/Contraction/af.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/am.ctb b/Tables/Contraction/am.ctb index 66a8ca17..722a5219 100644 --- a/Tables/Contraction/am.ctb +++ b/Tables/Contraction/am.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/countries.cti b/Tables/Contraction/countries.cti index 51df4a40..4f1c5855 100644 --- a/Tables/Contraction/countries.cti +++ b/Tables/Contraction/countries.cti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/de-basis.ctb b/Tables/Contraction/de-basis.ctb index 90e22e63..f2be6f34 100644 --- a/Tables/Contraction/de-basis.ctb +++ b/Tables/Contraction/de-basis.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/de-kurzschrift.ctb b/Tables/Contraction/de-kurzschrift.ctb index e9bf2e4a..df9f49f0 100644 --- a/Tables/Contraction/de-kurzschrift.ctb +++ b/Tables/Contraction/de-kurzschrift.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/de-vollschrift.ctb b/Tables/Contraction/de-vollschrift.ctb index 7826da79..f849217f 100644 --- a/Tables/Contraction/de-vollschrift.ctb +++ b/Tables/Contraction/de-vollschrift.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/en-ueb-g2.ctb b/Tables/Contraction/en-ueb-g2.ctb index 911147f7..68800222 100644 --- a/Tables/Contraction/en-ueb-g2.ctb +++ b/Tables/Contraction/en-ueb-g2.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/en-us-g2.ctb b/Tables/Contraction/en-us-g2.ctb index d232c2f1..59acab87 100644 --- a/Tables/Contraction/en-us-g2.ctb +++ b/Tables/Contraction/en-us-g2.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/es.ctb b/Tables/Contraction/es.ctb index d10a10d9..dca35682 100644 --- a/Tables/Contraction/es.ctb +++ b/Tables/Contraction/es.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/fr-abrege.ctb b/Tables/Contraction/fr-abrege.ctb index b07e7b12..a65d6517 100644 --- a/Tables/Contraction/fr-abrege.ctb +++ b/Tables/Contraction/fr-abrege.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -283,8 +283,8 @@ word apparente 1-1234-15 word apparentes 1-1234-156 word après 1-235 word assez 1-1356 -word atentif 1-2345-124 -word atentifs 1-2345-124-234 +word attentif 1-2345-124 +word attentifs 1-2345-124-234 word attention 1-2345 word attentions 1-2345-234 word attentive 1-2345-1236 diff --git a/Tables/Contraction/fr-integral.ctb b/Tables/Contraction/fr-integral.ctb index cde42a37..ae70ddd6 100644 --- a/Tables/Contraction/fr-integral.ctb +++ b/Tables/Contraction/fr-integral.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/ha.ctb b/Tables/Contraction/ha.ctb index a1e298dc..190c5319 100644 --- a/Tables/Contraction/ha.ctb +++ b/Tables/Contraction/ha.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/id.ctb b/Tables/Contraction/id.ctb index 54de7b9d..c7470bbb 100644 --- a/Tables/Contraction/id.ctb +++ b/Tables/Contraction/id.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/ipa.ctb b/Tables/Contraction/ipa.ctb index 64905d42..28561f06 100644 --- a/Tables/Contraction/ipa.ctb +++ b/Tables/Contraction/ipa.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/ja.ctb b/Tables/Contraction/ja.ctb index 7106eb21..49fcc21b 100644 --- a/Tables/Contraction/ja.ctb +++ b/Tables/Contraction/ja.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/ko-g1.ctb b/Tables/Contraction/ko-g1.ctb index 12340ee0..98d99a78 100644 --- a/Tables/Contraction/ko-g1.ctb +++ b/Tables/Contraction/ko-g1.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/ko-g2.ctb b/Tables/Contraction/ko-g2.ctb index 44b7452a..d0b40d45 100644 --- a/Tables/Contraction/ko-g2.ctb +++ b/Tables/Contraction/ko-g2.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/ko.ctb b/Tables/Contraction/ko.ctb index 64ddb3c6..a5dd62f2 100644 --- a/Tables/Contraction/ko.ctb +++ b/Tables/Contraction/ko.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/latex-access.ctb b/Tables/Contraction/latex-access.ctb index 7e59fa3b..d417f100 100755 --- a/Tables/Contraction/latex-access.ctb +++ b/Tables/Contraction/latex-access.ctb @@ -3,7 +3,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/letters-latin.cti b/Tables/Contraction/letters-latin.cti index b5a6bb2b..318dc21c 100644 --- a/Tables/Contraction/letters-latin.cti +++ b/Tables/Contraction/letters-latin.cti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/lt.ctb b/Tables/Contraction/lt.ctb new file mode 100644 index 00000000..05342d46 --- /dev/null +++ b/Tables/Contraction/lt.ctb @@ -0,0 +1,227 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +# BRLTTY Contraction Table - Lithuanian (uncontracted) +# +# Copyright (C) 2017 Rimas Kudelis +# Copyright (C) 2017 Tadas Matusevičius +# +# The Lithuanian 6-dot Braille alphabet is described in a decree +# no. 878 of the Minister of Education, called "Dėl perėjimo prie +# naujos lietuviškos Brailio rašto abėcėlės tvarkos ir programos", +# which is in effect since 2000-07-08. Document number is 55-1620. At +# the time of writing this file, the document was accessible at +# https://www.e-tar.lt/portal/lt/legalAct/TAR.A110E8E6A83F . +# The document is referred to as "the standard" below. +# +# The standard specifies only the mapping of Lithuanian letters to 6-dot +# Braille writing system, no other characters are defined in it. +# Definitions of some punctuation and other characters are informally +# available on the Internet. +# +# This table builds on from these bits of information, but also adds +# a number of other definitions to make it more useful in computing. +# +# This table is based on the respective liblouis table. + +### +### WHITESPACE +### + +include spaces.cti + +always \x09 0-0 U+0009 CHARACTER TABULATION + + +### +### LETTERS +### + +# Base Latin letters +include letters-latin.cti + +# Letters with diacritics which are part of the Lithuanian alphabet +always ą 16 +always Ą 16 +always č 146 +always Č 146 +always ę 156 +always Ę 156 +always ė 345 +always Ė 345 +always į 246 +always Į 246 +always š 2346 +always Š 2346 +always ų 346 +always Ų 346 +always ū 1256 +always Ū 1256 +always ž 126 +always Ž 126 + + +### +### DIGITS +### + +always 1 1 +always 2 12 +always 3 14 +always 4 145 +always 5 15 +always 6 124 +always 7 1245 +always 8 125 +always 9 24 +always 0 245 + + +### +### PUNCTUATION +### + +always , 2 +always . 256 +always ? 26 +always ! 235 +always : 25 +always ; 23 +always " 4 +always ' 3 +# According to Unicode, this is the preferred character to use for apostrophe. +always ’ 3 U+2019 RIGHT SINGLE QUOTATION MARK + +always ( 2356 +always ) 2356 +always [ 12356 +always ] 23456 +always { 6-246 +always } 6-135 + +always \x2D 36 U+002D - HYPHEN-MINUS +always \u2013 6-36 U+2013 – EN DASH +always \xAD 36 U+00AD [SOFT HYPHEN] +always \u2010 36 U+2010 ‐ HYPHEN +always \u2011 36 U+2011 ‑ NON-BREAKING HYPHEN +always \u2012 36 U+2012 ‒ FIGURE DASH +always \u2014 36 U+2014 — EM DASH +always \u2015 36 U+2015 ― HORIZONTAL BAR + +# These are the typographically correct quotes in Lithuanian texts. +always „ 236 U+201E DOUBLE LOW-9 QUOTATION MARK +always “ 356 U+201C LEFT DOUBLE QUOTATION MARK + +# The following quotation characters should not be used in Lithuanian texts. +always ” 6-4 U+201D RIGHT DOUBLE QUOTATION MARK +always ” 6-4 U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK +always « 6-4 U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +always » 6-4 U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +always ‹ 6-4 U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK +always › 6-4 U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + +always … 256-256-256 U+2026 HORIZONTAL ELLIPSIS +repeatable … 256-256-256 U+2026 HORIZONTAL ELLIPSIS +repeatable ... 256-256-256 Three times U+002E FULL STOP + + +### +### MATHEMATICAL SYMBOLS +### + +always + 5-235 +always − 5-36 U+2212 MINUS SIGN +always < 5-246 +always = 5-2356 +always > 5-135 +always ± 5-235-36 +always ∓ 5-36-235 U+2213 MINUS-OR-PLUS SIGN +always × 5-3 +always ⋅ 5-3 U+22C5 DOT OPERATOR +always ÷ 5-256 +always ∶ 5-256 U+2236 RATIO +always ⁄ 34 U+2044 FRACTION SLASH +always ∕ 34 U+2215 DIVISION SLASH + + +### +### OTHER CHARACTERS +### + +always # 6-3456 +always $ 6-46 +always % 123456 +always & 12346 +always * 35 +always / 34 +always @ 6-345 +always \\ 6-34 +always ^ 6-256 +always _ 1456 +always | 6-456 +#always ¦ 6-1456 +always § 6-346 +#always ¬ 6-235 +always µ 6-134 +#always ¶ 6-1234 + +always ` 6-3 +always ~ 6-26 + +#always ¢ 6-14 +always £ 6-123 +always € 6-15 U+20AC EURO SIGN + +always • 6-35 U+2022 BULLET + +always © 2356-46-14-2356 +always ® 2356-46-1235-2356 +always ℗ 2356-46-1234-2356 U+2117 SOUND RECORDING COPYRIGHT + +always ← 246-25 U+2190 LEFTWARDS ARROW +always → 25-135 U+2192 RIGHTWARDS ARROW + +# Middle dot is unlikely to appear in text, except perhaps as a multiplication sign (dot operator). +always · 5-3 U+00B7 MIDDLE DOT + +always ° 5-356 +always ′ 5-35 U+2032 PRIME +always ″ 5-35-35 U+2033 DOUBLE PRIME + +always ℃ 5-356-46-14 U+2103 DEGREE CELSIUS +always ℉ 5-356-46-124 U+2109 DEGREE FAHRENHEIT + + +### +### INDICATOR AND SPECIAL SYMBOL DIRECTIVES +### + +#always \uFFFD 7 U+FFFD � REPLACEMENT CHARACTER + +numsign 3456 number sign, just one operand +letsign 56 +capsign 46 +begcaps 456 +endcaps 56 + +midnum , 2 +midnum : 25 +midnum . 256 + +# when a decimal begins with a period, it should be translated with a +# number sign followed by a decimal point, followed by the number. diff --git a/Tables/Contraction/mg.ctb b/Tables/Contraction/mg.ctb index e060b6f5..7876a31e 100644 --- a/Tables/Contraction/mg.ctb +++ b/Tables/Contraction/mg.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/mun.ctb b/Tables/Contraction/mun.ctb index 91c2e4fe..01913788 100644 --- a/Tables/Contraction/mun.ctb +++ b/Tables/Contraction/mun.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/nabcc.cti b/Tables/Contraction/nabcc.cti index 7c578944..83240cc1 100644 --- a/Tables/Contraction/nabcc.cti +++ b/Tables/Contraction/nabcc.cti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/nl.ctb b/Tables/Contraction/nl.ctb index 6608f617..6c491256 100644 --- a/Tables/Contraction/nl.ctb +++ b/Tables/Contraction/nl.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/ny.ctb b/Tables/Contraction/ny.ctb index 8d3d250e..4c1e52b9 100644 --- a/Tables/Contraction/ny.ctb +++ b/Tables/Contraction/ny.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/pt.ctb b/Tables/Contraction/pt.ctb index 238cc8e8..3118e93f 100644 --- a/Tables/Contraction/pt.ctb +++ b/Tables/Contraction/pt.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/si.ctb b/Tables/Contraction/si.ctb index 6965ea68..4ae7a32f 100644 --- a/Tables/Contraction/si.ctb +++ b/Tables/Contraction/si.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/spaces.cti b/Tables/Contraction/spaces.cti new file mode 100644 index 00000000..04deba4d --- /dev/null +++ b/Tables/Contraction/spaces.cti @@ -0,0 +1,34 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +# This BRLTTY contraction subtable defines all the space characters to be empty +# braille cells. + +always \x20 0 SPACE +always \xA0 0 NO-BREAK SPACE +always \u2002 0 EN SPACE +always \u2003 0 EM SPACE +always \u2004 0 THREE-PER-EM SPACE +always \u2005 0 FOUR-PER-EM SPACE +always \u2006 0 SIX-PER-EM SPACE +always \u2007 0 FIGURE SPACE +always \u2008 0 PuNCTUATION SPACE +always \u2009 0 THIN SPACE +always \u200A 0 HAIR SPACE +always \u202F 0 NARROW NO-BREAK SPACE +always \u205F 0 MEDIUM MATHEMATICAL SPACE diff --git a/Tables/Contraction/sw.ctb b/Tables/Contraction/sw.ctb index 09832c7d..d7f7fbd8 100644 --- a/Tables/Contraction/sw.ctb +++ b/Tables/Contraction/sw.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/th.ctb b/Tables/Contraction/th.ctb index c59ebe76..a4f6214c 100644 --- a/Tables/Contraction/th.ctb +++ b/Tables/Contraction/th.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/zh-tw-ucb.ctb b/Tables/Contraction/zh-tw-ucb.ctb index cd231dd6..a77aa45c 100644 --- a/Tables/Contraction/zh-tw-ucb.ctb +++ b/Tables/Contraction/zh-tw-ucb.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/zh-tw.ctb b/Tables/Contraction/zh-tw.ctb index 23234cd4..906e0bb0 100644 --- a/Tables/Contraction/zh-tw.ctb +++ b/Tables/Contraction/zh-tw.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Contraction/zu.ctb b/Tables/Contraction/zu.ctb index 714e72ce..63a3818d 100644 --- a/Tables/Contraction/zu.ctb +++ b/Tables/Contraction/zu.ctb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/abt_basic.kti b/Tables/Input/al/abt_basic.kti index 6f80d7be..b1745d7e 100644 --- a/Tables/Input/al/abt_basic.kti +++ b/Tables/Input/al/abt_basic.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/abt_extra.kti b/Tables/Input/al/abt_extra.kti index 12cb33d6..0e8f7a17 100644 --- a/Tables/Input/al/abt_extra.kti +++ b/Tables/Input/al/abt_extra.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/abt_large.ktb b/Tables/Input/al/abt_large.ktb index 850391e4..9979e9d0 100644 --- a/Tables/Input/al/abt_large.ktb +++ b/Tables/Input/al/abt_large.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/abt_small.ktb b/Tables/Input/al/abt_small.ktb index 1e6262a2..57de1e4f 100644 --- a/Tables/Input/al/abt_small.ktb +++ b/Tables/Input/al/abt_small.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/bc-etouch.kti b/Tables/Input/al/bc-etouch.kti index 8728924c..03539fb7 100644 --- a/Tables/Input/al/bc-etouch.kti +++ b/Tables/Input/al/bc-etouch.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/bc-smartpad.kti b/Tables/Input/al/bc-smartpad.kti index e89ce8bc..562ea94d 100644 --- a/Tables/Input/al/bc-smartpad.kti +++ b/Tables/Input/al/bc-smartpad.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/bc-thumb.kti b/Tables/Input/al/bc-thumb.kti index a7e7aa31..7ca67d89 100644 --- a/Tables/Input/al/bc-thumb.kti +++ b/Tables/Input/al/bc-thumb.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/bc.kti b/Tables/Input/al/bc.kti index 54bb95d6..98e02fad 100644 --- a/Tables/Input/al/bc.kti +++ b/Tables/Input/al/bc.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/bc640.ktb b/Tables/Input/al/bc640.ktb index fa7bd793..5ff54c78 100644 --- a/Tables/Input/al/bc640.ktb +++ b/Tables/Input/al/bc640.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/bc680.ktb b/Tables/Input/al/bc680.ktb index a4462382..0d19cf01 100644 --- a/Tables/Input/al/bc680.ktb +++ b/Tables/Input/al/bc680.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/el.ktb b/Tables/Input/al/el.ktb index f7ae4e3e..f593315c 100644 --- a/Tables/Input/al/el.ktb +++ b/Tables/Input/al/el.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/sat_basic.kti b/Tables/Input/al/sat_basic.kti index 75e1d05b..f1388b9e 100644 --- a/Tables/Input/al/sat_basic.kti +++ b/Tables/Input/al/sat_basic.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/sat_extra.kti b/Tables/Input/al/sat_extra.kti index c640782a..a0d58ddd 100644 --- a/Tables/Input/al/sat_extra.kti +++ b/Tables/Input/al/sat_extra.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/sat_large.ktb b/Tables/Input/al/sat_large.ktb index e7183e1e..7ff161fa 100644 --- a/Tables/Input/al/sat_large.ktb +++ b/Tables/Input/al/sat_large.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/sat_small.ktb b/Tables/Input/al/sat_small.ktb index 8e9d2584..65ed790e 100644 --- a/Tables/Input/al/sat_small.ktb +++ b/Tables/Input/al/sat_small.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/al/voyager.ktb b/Tables/Input/al/voyager.ktb index b7687fe2..6377346e 100644 --- a/Tables/Input/al/voyager.ktb +++ b/Tables/Input/al/voyager.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/at/all.ktb b/Tables/Input/at/all.ktb index d66eb1f4..a9d5f641 100644 --- a/Tables/Input/at/all.ktb +++ b/Tables/Input/at/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bg/all.ktb b/Tables/Input/bg/all.ktb index 3a1a3b0d..bf88bed2 100644 --- a/Tables/Input/bg/all.ktb +++ b/Tables/Input/bg/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/b9b10.kti b/Tables/Input/bm/b9b10.kti index 668979ab..78718c7b 100644 --- a/Tables/Input/bm/b9b10.kti +++ b/Tables/Input/bm/b9b10.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -18,7 +18,7 @@ note B9 and B10 are the keys immediately to the left and right of the joystick. -bind B9 KEY_BACKSPACE +map B9 SPACE assign space B10 include keyboard.kti bind B9+RoutingKey SETLEFT diff --git a/Tables/Input/bm/b9b11b10.kti b/Tables/Input/bm/b9b11b10.kti index 7363ff19..d796d70f 100644 --- a/Tables/Input/bm/b9b11b10.kti +++ b/Tables/Input/bm/b9b11b10.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/command.kti b/Tables/Input/bm/command.kti index 33c57fdc..2c157d5a 100644 --- a/Tables/Input/bm/command.kti +++ b/Tables/Input/bm/command.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/connect.ktb b/Tables/Input/bm/connect.ktb index 9750f99c..7ce4b3d2 100644 --- a/Tables/Input/bm/connect.ktb +++ b/Tables/Input/bm/connect.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/conny.ktb b/Tables/Input/bm/conny.ktb index 2687883e..efd05b22 100644 --- a/Tables/Input/bm/conny.ktb +++ b/Tables/Input/bm/conny.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/d6.kti b/Tables/Input/bm/d6.kti index a7c0f00d..80077d9f 100644 --- a/Tables/Input/bm/d6.kti +++ b/Tables/Input/bm/d6.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/default.ktb b/Tables/Input/bm/default.ktb index 22074c52..83f802ea 100644 --- a/Tables/Input/bm/default.ktb +++ b/Tables/Input/bm/default.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/display6.kti b/Tables/Input/bm/display6.kti index f44bd0a7..e4af0f2f 100644 --- a/Tables/Input/bm/display6.kti +++ b/Tables/Input/bm/display6.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/display7.kti b/Tables/Input/bm/display7.kti index 4bc15ed8..c01b6417 100644 --- a/Tables/Input/bm/display7.kti +++ b/Tables/Input/bm/display7.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/dm80p.ktb b/Tables/Input/bm/dm80p.ktb index e3d209c7..35a72c6e 100644 --- a/Tables/Input/bm/dm80p.ktb +++ b/Tables/Input/bm/dm80p.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/front10.kti b/Tables/Input/bm/front10.kti index 20c854ec..891a16da 100644 --- a/Tables/Input/bm/front10.kti +++ b/Tables/Input/bm/front10.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/front6.kti b/Tables/Input/bm/front6.kti index 5aa28f35..11266fa4 100644 --- a/Tables/Input/bm/front6.kti +++ b/Tables/Input/bm/front6.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/horizontal.kti b/Tables/Input/bm/horizontal.kti index d044ae52..51522206 100644 --- a/Tables/Input/bm/horizontal.kti +++ b/Tables/Input/bm/horizontal.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/inka.ktb b/Tables/Input/bm/inka.ktb index bb8ba63b..3873a782 100644 --- a/Tables/Input/bm/inka.ktb +++ b/Tables/Input/bm/inka.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/keyboard.kti b/Tables/Input/bm/keyboard.kti index 46faed0d..ad51bf13 100644 --- a/Tables/Input/bm/keyboard.kti +++ b/Tables/Input/bm/keyboard.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/orbit.ktb b/Tables/Input/bm/orbit.ktb index f72f1272..3ee02a42 100644 --- a/Tables/Input/bm/orbit.ktb +++ b/Tables/Input/bm/orbit.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/pro.ktb b/Tables/Input/bm/pro.ktb index 046c3347..71c1add5 100644 --- a/Tables/Input/bm/pro.ktb +++ b/Tables/Input/bm/pro.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/pronto.ktb b/Tables/Input/bm/pronto.ktb index a5a1c0df..31fa133e 100644 --- a/Tables/Input/bm/pronto.ktb +++ b/Tables/Input/bm/pronto.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/pv.ktb b/Tables/Input/bm/pv.ktb index 7d1e9c52..46837677 100644 --- a/Tables/Input/bm/pv.ktb +++ b/Tables/Input/bm/pv.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/rb.ktb b/Tables/Input/bm/rb.ktb index 370b269f..f1548bc1 100644 --- a/Tables/Input/bm/rb.ktb +++ b/Tables/Input/bm/rb.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hw/mb1.ktb b/Tables/Input/bm/routing.kti similarity index 86% rename from Tables/Input/hw/mb1.ktb rename to Tables/Input/bm/routing.kti index 5a1ef0a6..5c0074fb 100644 --- a/Tables/Input/hw/mb1.ktb +++ b/Tables/Input/bm/routing.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -16,6 +16,4 @@ # This software is maintained by Dave Mielke . ############################################################################### -title HumanWare Brailliant B (has no keyboard) - -include nav.kti +bind RoutingKey ROUTE diff --git a/Tables/Input/bm/routing6.kti b/Tables/Input/bm/routing6.kti index 15b901a6..4f3c78d9 100644 --- a/Tables/Input/bm/routing6.kti +++ b/Tables/Input/bm/routing6.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -18,7 +18,7 @@ # This key subtable is for Baum displays which have routing keys and 6 display keys. -bind RoutingKey ROUTE +include routing.kti bind Display1+RoutingKey CLIP_NEW bind Display2+RoutingKey CLIP_ADD diff --git a/Tables/Input/bm/routing7.kti b/Tables/Input/bm/routing7.kti index e596e990..9f018d48 100644 --- a/Tables/Input/bm/routing7.kti +++ b/Tables/Input/bm/routing7.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -18,7 +18,7 @@ # This key subtable is for Baum displays which have routing keys and 7 display keys. -bind !RoutingKey ROUTE +include routing.kti bind Display5+!RoutingKey DESCCHAR diff --git a/Tables/Input/bm/status.kti b/Tables/Input/bm/status.kti index 0b2db6ed..6038a7ae 100644 --- a/Tables/Input/bm/status.kti +++ b/Tables/Input/bm/status.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/sv.ktb b/Tables/Input/bm/sv.ktb index ec504ffd..3daa0031 100644 --- a/Tables/Input/bm/sv.ktb +++ b/Tables/Input/bm/sv.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/ultra.ktb b/Tables/Input/bm/ultra.ktb index 0e7543d6..81db687c 100644 --- a/Tables/Input/bm/ultra.ktb +++ b/Tables/Input/bm/ultra.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/v40.ktb b/Tables/Input/bm/v40.ktb index 2f0324a2..87fb4aa8 100644 --- a/Tables/Input/bm/v40.ktb +++ b/Tables/Input/bm/v40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/v80.ktb b/Tables/Input/bm/v80.ktb index a97f61c7..c42eec83 100644 --- a/Tables/Input/bm/v80.ktb +++ b/Tables/Input/bm/v80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/vertical.kti b/Tables/Input/bm/vertical.kti index 57fe20d7..7241fe31 100644 --- a/Tables/Input/bm/vertical.kti +++ b/Tables/Input/bm/vertical.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/vk.ktb b/Tables/Input/bm/vk.ktb index 389a0afc..74ac7731 100644 --- a/Tables/Input/bm/vk.ktb +++ b/Tables/Input/bm/vk.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bm/wheels.kti b/Tables/Input/bm/wheels.kti index 4dd70182..53a66761 100644 --- a/Tables/Input/bm/wheels.kti +++ b/Tables/Input/bm/wheels.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bn/all.ktb b/Tables/Input/bn/all.ktb index 261ba6d5..42e5f304 100644 --- a/Tables/Input/bn/all.ktb +++ b/Tables/Input/bn/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bn/input.kti b/Tables/Input/bn/input.kti index 5c4650c9..2f7ea9a3 100644 --- a/Tables/Input/bn/input.kti +++ b/Tables/Input/bn/input.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/bp/all.kti b/Tables/Input/bp/all.kti index 8ff1f8e6..597bff5a 100644 --- a/Tables/Input/bp/all.kti +++ b/Tables/Input/bp/all.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/cb/all.ktb b/Tables/Input/cb/all.ktb index 874074aa..da509f97 100644 --- a/Tables/Input/cb/all.ktb +++ b/Tables/Input/cb/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ce/all.ktb b/Tables/Input/ce/all.ktb index 4572a634..aa00c885 100644 --- a/Tables/Input/ce/all.ktb +++ b/Tables/Input/ce/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ce/novem.ktb b/Tables/Input/ce/novem.ktb index 70df1320..e03653dd 100644 --- a/Tables/Input/ce/novem.ktb +++ b/Tables/Input/ce/novem.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/chords.kti b/Tables/Input/chords.kti index 843c5a8c..68cd29c3 100644 --- a/Tables/Input/chords.kti +++ b/Tables/Input/chords.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/braille.kti b/Tables/Input/eu/braille.kti index 8120d09a..4efc7389 100644 --- a/Tables/Input/eu/braille.kti +++ b/Tables/Input/eu/braille.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/clio.ktb b/Tables/Input/eu/clio.ktb index a12cf7f7..5e656ab9 100644 --- a/Tables/Input/eu/clio.ktb +++ b/Tables/Input/eu/clio.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/common.kti b/Tables/Input/eu/common.kti index 712a484b..b493e82d 100644 --- a/Tables/Input/eu/common.kti +++ b/Tables/Input/eu/common.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/esys_large.ktb b/Tables/Input/eu/esys_large.ktb index 9e057d27..23905759 100644 --- a/Tables/Input/eu/esys_large.ktb +++ b/Tables/Input/eu/esys_large.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/esys_medium.ktb b/Tables/Input/eu/esys_medium.ktb index 8cb52bbc..9512e5dc 100644 --- a/Tables/Input/eu/esys_medium.ktb +++ b/Tables/Input/eu/esys_medium.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/esys_small.ktb b/Tables/Input/eu/esys_small.ktb index 275d51fc..f791dbb8 100644 --- a/Tables/Input/eu/esys_small.ktb +++ b/Tables/Input/eu/esys_small.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/esytime.ktb b/Tables/Input/eu/esytime.ktb index 89244262..8280d8db 100644 --- a/Tables/Input/eu/esytime.ktb +++ b/Tables/Input/eu/esytime.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -18,12 +18,12 @@ title EuroBraille Esytime -include routing.kti +include common.kti note The four keys below the left joystick, from top to bottom, are: note * L1, Escape, Tab, Shift. note The four keys below the right joystick, from top to bottom, are: -note * L5, Insert, Alt, Control. +note * L8, Insert, Alt, Control. note Some key combinations have been reserved for internal use: note + LeftJoystickDown: the Alt key note + LeftJoystickPress: the Alt key pressed twice in a row @@ -31,15 +31,15 @@ note + LeftJoystickDown + RightJoystick(Right/Left): enable/disable braille func note + LeftJoystickDown + RightJoystick(Up/Down): switch to internal/external (Esytime/PC) USB interface note + LeftJoystickDown + L1 + Escape: switch to single-hand braille keyboard 1 note + LeftJoystickDown + Shift + Tab: switch to single-hand braille keyboard 2 -note + LeftJoystickDown + Insert + L5: switch to standard (two-hand) braille keyboard +note + LeftJoystickDown + Insert + L8: switch to standard (two-hand) braille keyboard note + RightJoystickPress: the Enter key note + RightJoystick(left/right/up/down): the Arrow Left/Right/Up/Down key -bind L1+L5 HOME +bind L1+L8 HOME bind LeftJoystickPress+RightJoystickPress BACK bind L1 FWINLT -bind L5 FWINRT +bind L8 FWINRT bind LeftJoystickLeft LNUP bind LeftJoystickRight LNDN @@ -100,11 +100,11 @@ bind L1+LeftJoystickRight CHRRT bind L1+LeftJoystickUp PRSEARCH bind L1+LeftJoystickDown NXSEARCH -bind L5+LeftJoystickPress CSRJMP_VERT -bind L5+LeftJoystickLeft FWINLTSKIP -bind L5+LeftJoystickRight FWINRTSKIP -bind L5+LeftJoystickUp LNBEG -bind L5+LeftJoystickDown LNEND +bind L8+LeftJoystickPress CSRJMP_VERT +bind L8+LeftJoystickLeft FWINLTSKIP +bind L8+LeftJoystickRight FWINRTSKIP +bind L8+LeftJoystickUp LNBEG +bind L8+LeftJoystickDown LNEND bind L1+RightJoystickPress PREFMENU bind L1+RightJoystickLeft PREFLOAD @@ -112,16 +112,15 @@ bind L1+RightJoystickRight PREFSAVE bind L1+RightJoystickUp HELP bind L1+RightJoystickDown LEARN -bind L5+RightJoystickPress PASTE -bind L5+RightJoystickLeft CLIP_RESTORE -bind L5+RightJoystickRight CLIP_SAVE -bind L5+RightJoystickUp FREEZE -bind L5+RightJoystickDown AUTOREPEAT +bind L8+RightJoystickPress PASTE +bind L8+RightJoystickLeft CLIP_RESTORE +bind L8+RightJoystickRight CLIP_SAVE +bind L8+RightJoystickUp FREEZE +bind L8+RightJoystickDown AUTOREPEAT context menu -bind L5+RightJoystickUp MENU_PREV_ITEM -bind L5+RightJoystickDown MENU_NEXT_ITEM -bind L5+RightJoystickLeft MENU_PREV_SETTING -bind L5+RightJoystickRight MENU_NEXT_SETTING -bind L5+RightJoystickPress MENU_PREV_LEVEL - +bind L8+RightJoystickUp MENU_PREV_ITEM +bind L8+RightJoystickDown MENU_NEXT_ITEM +bind L8+RightJoystickLeft MENU_PREV_SETTING +bind L8+RightJoystickRight MENU_NEXT_SETTING +bind L8+RightJoystickPress MENU_PREV_LEVEL diff --git a/Tables/Input/eu/iris.ktb b/Tables/Input/eu/iris.ktb index 9b973b78..b7f0066c 100644 --- a/Tables/Input/eu/iris.ktb +++ b/Tables/Input/eu/iris.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/joysticks.kti b/Tables/Input/eu/joysticks.kti index aae03ae0..bc52deaa 100644 --- a/Tables/Input/eu/joysticks.kti +++ b/Tables/Input/eu/joysticks.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/routing.kti b/Tables/Input/eu/routing.kti index aba36154..0c8d2ed5 100644 --- a/Tables/Input/eu/routing.kti +++ b/Tables/Input/eu/routing.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/sw12.kti b/Tables/Input/eu/sw12.kti index 6b7643cc..b44b0f0b 100644 --- a/Tables/Input/eu/sw12.kti +++ b/Tables/Input/eu/sw12.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/sw34.kti b/Tables/Input/eu/sw34.kti index 15b06db0..d6d4f2c1 100644 --- a/Tables/Input/eu/sw34.kti +++ b/Tables/Input/eu/sw34.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/eu/sw56.kti b/Tables/Input/eu/sw56.kti index c9c707e3..31b0f7c0 100644 --- a/Tables/Input/eu/sw56.kti +++ b/Tables/Input/eu/sw56.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/bumpers.kti b/Tables/Input/fs/bumpers.kti index 56503101..86759c64 100644 --- a/Tables/Input/fs/bumpers.kti +++ b/Tables/Input/fs/bumpers.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/common.kti b/Tables/Input/fs/common.kti index 5929cb51..8733c2c7 100644 --- a/Tables/Input/fs/common.kti +++ b/Tables/Input/fs/common.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/focus_basic.ktb b/Tables/Input/fs/focus_basic.ktb index 1f201bac..45f3869d 100644 --- a/Tables/Input/fs/focus_basic.ktb +++ b/Tables/Input/fs/focus_basic.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/focus_basic.kti b/Tables/Input/fs/focus_basic.kti index 9095bfc8..96f3e7f8 100644 --- a/Tables/Input/fs/focus_basic.kti +++ b/Tables/Input/fs/focus_basic.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/focus_large.ktb b/Tables/Input/fs/focus_large.ktb index 1dec473f..72e7f237 100644 --- a/Tables/Input/fs/focus_large.ktb +++ b/Tables/Input/fs/focus_large.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/focus_small.ktb b/Tables/Input/fs/focus_small.ktb index f06771ce..74bdbb65 100644 --- a/Tables/Input/fs/focus_small.ktb +++ b/Tables/Input/fs/focus_small.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/pacmate.ktb b/Tables/Input/fs/pacmate.ktb index 295d4db2..d35af2e1 100644 --- a/Tables/Input/fs/pacmate.ktb +++ b/Tables/Input/fs/pacmate.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/fs/rockers.kti b/Tables/Input/fs/rockers.kti index 51122543..3b89aa87 100644 --- a/Tables/Input/fs/rockers.kti +++ b/Tables/Input/fs/rockers.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hd/mbl.ktb b/Tables/Input/hd/mbl.ktb index 2ebaf8ad..db8bff87 100644 --- a/Tables/Input/hd/mbl.ktb +++ b/Tables/Input/hd/mbl.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hd/pfl.ktb b/Tables/Input/hd/pfl.ktb index ddde33b7..96c3b066 100644 --- a/Tables/Input/hd/pfl.ktb +++ b/Tables/Input/hd/pfl.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/beetle.ktb b/Tables/Input/hm/beetle.ktb index 75ce0fd7..0acc3177 100644 --- a/Tables/Input/hm/beetle.ktb +++ b/Tables/Input/hm/beetle.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/braille.kti b/Tables/Input/hm/braille.kti index e3eaf19c..4133cd09 100644 --- a/Tables/Input/hm/braille.kti +++ b/Tables/Input/hm/braille.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/common.kti b/Tables/Input/hm/common.kti index 01ac61db..5c0074fb 100644 --- a/Tables/Input/hm/common.kti +++ b/Tables/Input/hm/common.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/contexts.kti b/Tables/Input/hm/contexts.kti index b1f75b1a..c309e409 100644 --- a/Tables/Input/hm/contexts.kti +++ b/Tables/Input/hm/contexts.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/edge.ktb b/Tables/Input/hm/edge.ktb index 43c3a0ca..825d90c4 100644 --- a/Tables/Input/hm/edge.ktb +++ b/Tables/Input/hm/edge.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/f14.kti b/Tables/Input/hm/f14.kti index 4790ec96..b60a907c 100644 --- a/Tables/Input/hm/f14.kti +++ b/Tables/Input/hm/f14.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/f18.kti b/Tables/Input/hm/f18.kti index 7e844995..d8affe75 100644 --- a/Tables/Input/hm/f18.kti +++ b/Tables/Input/hm/f18.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/fnkey.kti b/Tables/Input/hm/fnkey.kti index f4ba3ae4..e76e6cdd 100644 --- a/Tables/Input/hm/fnkey.kti +++ b/Tables/Input/hm/fnkey.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/left.kti b/Tables/Input/hm/left.kti index 6d102c8f..c48b0413 100644 --- a/Tables/Input/hm/left.kti +++ b/Tables/Input/hm/left.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/letters.kti b/Tables/Input/hm/letters.kti index 6c65a4c4..252211fd 100644 --- a/Tables/Input/hm/letters.kti +++ b/Tables/Input/hm/letters.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/pan.ktb b/Tables/Input/hm/pan.ktb index 757b2a31..88beafa5 100644 --- a/Tables/Input/hm/pan.ktb +++ b/Tables/Input/hm/pan.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/pan.kti b/Tables/Input/hm/pan.kti index 648e542b..fa4b19c2 100644 --- a/Tables/Input/hm/pan.kti +++ b/Tables/Input/hm/pan.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/qwerty.ktb b/Tables/Input/hm/qwerty.ktb index 5bb9a936..5b3c90fb 100644 --- a/Tables/Input/hm/qwerty.ktb +++ b/Tables/Input/hm/qwerty.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/qwerty.kti b/Tables/Input/hm/qwerty.kti index 9987e29f..99be7704 100644 --- a/Tables/Input/hm/qwerty.kti +++ b/Tables/Input/hm/qwerty.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/right.kti b/Tables/Input/hm/right.kti index 5def70c6..4e2c27c4 100644 --- a/Tables/Input/hm/right.kti +++ b/Tables/Input/hm/right.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/scroll.ktb b/Tables/Input/hm/scroll.ktb index 8c33d883..9847c461 100644 --- a/Tables/Input/hm/scroll.ktb +++ b/Tables/Input/hm/scroll.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/scroll.kti b/Tables/Input/hm/scroll.kti index b05ae3cf..a848cf78 100644 --- a/Tables/Input/hm/scroll.kti +++ b/Tables/Input/hm/scroll.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hm/sync.ktb b/Tables/Input/hm/sync.ktb index a2b27db4..e93507bb 100644 --- a/Tables/Input/hm/sync.ktb +++ b/Tables/Input/hm/sync.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/ab40.ktb b/Tables/Input/ht/ab40.ktb index 49ce97f2..515ecc7e 100644 --- a/Tables/Input/ht/ab40.ktb +++ b/Tables/Input/ht/ab40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/alo.ktb b/Tables/Input/ht/alo.ktb index e987c1b9..cd20b232 100644 --- a/Tables/Input/ht/alo.ktb +++ b/Tables/Input/ht/alo.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/as40.ktb b/Tables/Input/ht/as40.ktb index ec6f2e43..eb984196 100644 --- a/Tables/Input/ht/as40.ktb +++ b/Tables/Input/ht/as40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/bb.ktb b/Tables/Input/ht/bb.ktb index 8f84f6f7..68f25a09 100644 --- a/Tables/Input/ht/bb.ktb +++ b/Tables/Input/ht/bb.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/bkwm.ktb b/Tables/Input/ht/bkwm.ktb index fbb6ec7b..f42f1090 100644 --- a/Tables/Input/ht/bkwm.ktb +++ b/Tables/Input/ht/bkwm.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/brln.ktb b/Tables/Input/ht/brln.ktb index e15f1d62..9c6b5ed1 100644 --- a/Tables/Input/ht/brln.ktb +++ b/Tables/Input/ht/brln.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/bs.kti b/Tables/Input/ht/bs.kti index 53dc498d..0562cab6 100644 --- a/Tables/Input/ht/bs.kti +++ b/Tables/Input/ht/bs.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/bs40.ktb b/Tables/Input/ht/bs40.ktb index 78c4fa3d..34ceab75 100644 --- a/Tables/Input/ht/bs40.ktb +++ b/Tables/Input/ht/bs40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/bs80.ktb b/Tables/Input/ht/bs80.ktb index 43981f84..a2dfd2ae 100644 --- a/Tables/Input/ht/bs80.ktb +++ b/Tables/Input/ht/bs80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/cb40.ktb b/Tables/Input/ht/cb40.ktb index 543e3777..33eabc46 100644 --- a/Tables/Input/ht/cb40.ktb +++ b/Tables/Input/ht/cb40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/dots.kti b/Tables/Input/ht/dots.kti index 1883d6c0..cc3e2104 100644 --- a/Tables/Input/ht/dots.kti +++ b/Tables/Input/ht/dots.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/easy.ktb b/Tables/Input/ht/easy.ktb index 5d531dca..c52bd3bb 100644 --- a/Tables/Input/ht/easy.ktb +++ b/Tables/Input/ht/easy.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/input.kti b/Tables/Input/ht/input.kti index 046c64da..f744f3c0 100644 --- a/Tables/Input/ht/input.kti +++ b/Tables/Input/ht/input.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/joystick.kti b/Tables/Input/ht/joystick.kti index b8a2dcc0..f9e1d3f9 100644 --- a/Tables/Input/ht/joystick.kti +++ b/Tables/Input/ht/joystick.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/keypad.kti b/Tables/Input/ht/keypad.kti index 36239aea..7c98339b 100644 --- a/Tables/Input/ht/keypad.kti +++ b/Tables/Input/ht/keypad.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/mc88.ktb b/Tables/Input/ht/mc88.ktb index 5c08160b..e93a721d 100644 --- a/Tables/Input/ht/mc88.ktb +++ b/Tables/Input/ht/mc88.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/mdlr.ktb b/Tables/Input/ht/mdlr.ktb index 0a2dc276..1e81135a 100644 --- a/Tables/Input/ht/mdlr.ktb +++ b/Tables/Input/ht/mdlr.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/me.kti b/Tables/Input/ht/me.kti index 508d62e4..caec0db2 100644 --- a/Tables/Input/ht/me.kti +++ b/Tables/Input/ht/me.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/me64.ktb b/Tables/Input/ht/me64.ktb index 5ca701f6..74ba149a 100644 --- a/Tables/Input/ht/me64.ktb +++ b/Tables/Input/ht/me64.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/me88.ktb b/Tables/Input/ht/me88.ktb index 869feaea..cefb30eb 100644 --- a/Tables/Input/ht/me88.ktb +++ b/Tables/Input/ht/me88.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/rockers.kti b/Tables/Input/ht/rockers.kti index d802676b..d101bc46 100644 --- a/Tables/Input/ht/rockers.kti +++ b/Tables/Input/ht/rockers.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ht/wave.ktb b/Tables/Input/ht/wave.ktb index 1b93795b..2c64048d 100644 --- a/Tables/Input/ht/wave.ktb +++ b/Tables/Input/ht/wave.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/hw/mb2.ktb b/Tables/Input/hw/B80.ktb similarity index 84% rename from Tables/Input/hw/mb2.ktb rename to Tables/Input/hw/B80.ktb index f90e4b7d..a490d84a 100644 --- a/Tables/Input/hw/mb2.ktb +++ b/Tables/Input/hw/B80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -16,7 +16,7 @@ # This software is maintained by Dave Mielke . ############################################################################### -title HumanWare Brailliant BI (has braille keyboard) +title HumanWare Brailliant B 80 -include nav.kti -include kbd.kti +include thumb.kti +include command.kti diff --git a/Tables/Input/hw/BI14.ktb b/Tables/Input/hw/BI14.ktb new file mode 100644 index 00000000..c271d814 --- /dev/null +++ b/Tables/Input/hw/BI14.ktb @@ -0,0 +1,23 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +title HumanWare Brailliant BI 14 + +include thumb.kti +include braille.kti +include joystick.kti diff --git a/Tables/Input/hw/BI32.ktb b/Tables/Input/hw/BI32.ktb new file mode 100644 index 00000000..094f2f32 --- /dev/null +++ b/Tables/Input/hw/BI32.ktb @@ -0,0 +1,23 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +title HumanWare Brailliant BI 32 + +include thumb.kti +include braille.kti +include command.kti diff --git a/Tables/Input/hw/BI40.ktb b/Tables/Input/hw/BI40.ktb new file mode 100644 index 00000000..4599dfa8 --- /dev/null +++ b/Tables/Input/hw/BI40.ktb @@ -0,0 +1,23 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +title HumanWare Brailliant BI 40 + +include thumb.kti +include braille.kti +include command.kti diff --git a/Tables/Input/hw/kbd.kti b/Tables/Input/hw/braille.kti similarity index 69% rename from Tables/Input/hw/kbd.kti rename to Tables/Input/hw/braille.kti index 14b16e9e..51b5081f 100644 --- a/Tables/Input/hw/kbd.kti +++ b/Tables/Input/hw/braille.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -16,6 +16,9 @@ # This software is maintained by Dave Mielke . ############################################################################### +note There's an eight-key braille keyboard near the back of the top. +note * From left to right, its keys are: Dot7, Dot3, Dot2, Dot1, Dot4, Dot5, Dot6, Dot8. + assign chord Space+ include ../chords.kti @@ -28,11 +31,11 @@ map Dot6 DOT6 map Dot7 DOT7 map Dot8 DOT8 map Space SPACE -map Thumb2 META -map Thumb3 CONTROL +map Back META +map Advance CONTROL bind Space+RoutingKey KEY_FUNCTION -bind Thumb2+Space+RoutingKey KEY_FUNCTION+meta -bind Thumb3+Space+RoutingKey KEY_FUNCTION+control -bind Thumb2+Thumb3+Space+RoutingKey KEY_FUNCTION+meta+control +bind Back+Space+RoutingKey KEY_FUNCTION+meta +bind Advance+Space+RoutingKey KEY_FUNCTION+control +bind Back+Advance+Space+RoutingKey KEY_FUNCTION+meta+control diff --git a/Tables/Input/hw/command.kti b/Tables/Input/hw/command.kti new file mode 100644 index 00000000..58b2da4e --- /dev/null +++ b/Tables/Input/hw/command.kti @@ -0,0 +1,20 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +include ../bm/display6.kti +include ../bm/routing6.kti diff --git a/Tables/Input/hw/joystick.kti b/Tables/Input/hw/joystick.kti new file mode 100644 index 00000000..e54bfac9 --- /dev/null +++ b/Tables/Input/hw/joystick.kti @@ -0,0 +1,23 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +note There's a five-way joystick between the Dot1 and Dot4 keys. +note * The four directions are intuitively named: Up, Down, Left, Right. +note * Pressing the joystick is named: Action. + +include ../bm/routing.kti diff --git a/Tables/Input/hw/nav.kti b/Tables/Input/hw/thumb.kti similarity index 50% rename from Tables/Input/hw/nav.kti rename to Tables/Input/hw/thumb.kti index dea6a511..71187e53 100644 --- a/Tables/Input/hw/nav.kti +++ b/Tables/Input/hw/thumb.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -16,29 +16,29 @@ # This software is maintained by Dave Mielke . ############################################################################### +note There are four thumb keys on the front. From left to right, they are: +note * Previous, Back, Advance, Next. + #################### # Default Bindings # #################### -bind Thumb2+Thumb3 HOME -bind Thumb2 LNUP -bind Thumb3 LNDN -bind Thumb1 FWINLT -bind Thumb4 FWINRT - -bind Thumb1+Thumb2 TOP_LEFT -bind Thumb1+Thumb3 BOT_LEFT -bind Thumb4+Thumb2 PRDIFLN -bind Thumb4+Thumb3 NXDIFLN +bind Back+Advance HOME +bind Back LNUP +bind Advance LNDN +bind Previous FWINLT +bind Next FWINRT -bind Thumb1+RoutingKey CLIP_NEW -bind Thumb2+RoutingKey CLIP_ADD -bind Thumb3+RoutingKey COPY_RECT -bind Thumb4+RoutingKey COPY_LINE -bind Thumb1+Thumb4 PASTE +bind Previous+Back TOP_LEFT +bind Previous+Advance BOT_LEFT +bind Next+Back PRDIFLN +bind Next+Advance NXDIFLN -include ../bm/display6.kti -include ../bm/routing6.kti +bind Previous+RoutingKey CLIP_NEW +bind Back+RoutingKey CLIP_ADD +bind Advance+RoutingKey COPY_RECT +bind Next+RoutingKey COPY_LINE +bind Previous+Next PASTE ################# @@ -47,15 +47,15 @@ include ../bm/routing6.kti context menu -bind Thumb1 FWINLT -bind Thumb4 FWINRT -bind Thumb2 MENU_PREV_ITEM -bind Thumb3 MENU_NEXT_ITEM -bind Thumb1+Thumb2 MENU_FIRST_ITEM -bind Thumb1+Thumb3 MENU_LAST_ITEM -bind Thumb4+Thumb2 MENU_PREV_SETTING -bind Thumb4+Thumb3 MENU_NEXT_SETTING -bind Thumb2+Thumb3 PREFMENU -bind Thumb2+Thumb3+Thumb1 PREFLOAD -bind Thumb2+Thumb3+Thumb4 PREFSAVE +bind Previous FWINLT +bind Next FWINRT +bind Back MENU_PREV_ITEM +bind Advance MENU_NEXT_ITEM +bind Previous+Back MENU_FIRST_ITEM +bind Previous+Advance MENU_LAST_ITEM +bind Next+Back MENU_PREV_SETTING +bind Next+Advance MENU_NEXT_SETTING +bind Back+Advance PREFMENU +bind Back+Advance+Previous PREFLOAD +bind Back+Advance+Next PREFSAVE diff --git a/Tables/Input/hw/touch.ktb b/Tables/Input/hw/touch.ktb new file mode 100644 index 00000000..9bde806d --- /dev/null +++ b/Tables/Input/hw/touch.ktb @@ -0,0 +1,22 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +title HumanWare BrailleNote Touch + +include thumb.kti +include braille.kti diff --git a/Tables/Input/ic/all.ktb b/Tables/Input/ic/all.ktb new file mode 100644 index 00000000..2f2ec7dc --- /dev/null +++ b/Tables/Input/ic/all.ktb @@ -0,0 +1,67 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2016 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +title Innovision + +map Dot1 DOT1 +map Dot2 DOT2 +map Dot3 DOT3 +map Dot4 DOT4 +map Dot5 DOT5 +map Dot6 DOT6 +map Dot7 DOT7 +map Dot8 DOT8 +map Space SPACE + +bind Enter KEY_ENTER +bind Space+Back KEY_BACKSPACE +bind Space+Enter KEY_DELETE + +bind LeftUp LNUP +bind LeftDown LNDN + +bind RightUp FWINLT +bind RightDown FWINRT + +bind Space+Dot2+Dot3+Enter TOP +bind Space+Dot2+Dot6+Enter BOT + +bind Space+Dot1+Dot3 PRPROMPT +bind Space+Dot1+Dot6 NXPROMPT + +bind Space+Dot1+LeftUp PRPGRPH +bind Space+Dot1+LeftDown NXPGRPH + +bind Space+Dot1+Dot3+Enter PRDIFLN +bind Space+Dot1+Dot6+Enter NXDIFLN + +bind Space+RightUp ATTRUP +bind Space+RightDown ATTRDN + +bind Space+Dot1+RightUp FWINLTSKIP +bind Space+Dot1+RightDown FWINRTSKIP + +bind Space+Dot3 KEY_PAGE_UP +bind Space+Dot6 KEY_PAGE_DOWN + +bind Space+Dot1+Dot2+Dot3+Dot4+Dot5+Dot6 KEY_FUNCTION+1 # Android Back +bind Space+Dot3+Enter KEY_FUNCTION+0 # Android Home +bind Space+Dot5+LeftUp KEY_FUNCTION+2 # Android Notifications +bind Space+Dot2+Dot5 KEY_FUNCTION+3 # Android RecentApps + +bind RoutingKey ROUTE diff --git a/Tables/Input/ir/all.kti b/Tables/Input/ir/all.kti index 9f4192b0..c181a9af 100644 --- a/Tables/Input/ir/all.kti +++ b/Tables/Input/ir/all.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ir/brl.ktb b/Tables/Input/ir/brl.ktb index 81249a70..6a419c37 100644 --- a/Tables/Input/ir/brl.ktb +++ b/Tables/Input/ir/brl.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ir/pc.ktb b/Tables/Input/ir/pc.ktb index 8573a766..14cc8faa 100644 --- a/Tables/Input/ir/pc.ktb +++ b/Tables/Input/ir/pc.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/common.kti b/Tables/Input/md/common.kti index 969066cb..ef6760e2 100644 --- a/Tables/Input/md/common.kti +++ b/Tables/Input/md/common.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/default.ktb b/Tables/Input/md/default.ktb index cdc9d1fb..3256d7f2 100644 --- a/Tables/Input/md/default.ktb +++ b/Tables/Input/md/default.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/fk.ktb b/Tables/Input/md/fk.ktb index fa1e469a..54886ab4 100644 --- a/Tables/Input/md/fk.ktb +++ b/Tables/Input/md/fk.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/fk_s.ktb b/Tables/Input/md/fk_s.ktb index f102913b..61ebcc4a 100644 --- a/Tables/Input/md/fk_s.ktb +++ b/Tables/Input/md/fk_s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/fkeys.kti b/Tables/Input/md/fkeys.kti index 8ce9e051..df796cdb 100644 --- a/Tables/Input/md/fkeys.kti +++ b/Tables/Input/md/fkeys.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/kbd.ktb b/Tables/Input/md/kbd.ktb index d65cefe1..bd8b309a 100644 --- a/Tables/Input/md/kbd.ktb +++ b/Tables/Input/md/kbd.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/keyboard.kti b/Tables/Input/md/keyboard.kti index b924b88f..76465703 100644 --- a/Tables/Input/md/keyboard.kti +++ b/Tables/Input/md/keyboard.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/md/status.kti b/Tables/Input/md/status.kti index 81179d87..f63c71a5 100644 --- a/Tables/Input/md/status.kti +++ b/Tables/Input/md/status.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/menu.kti b/Tables/Input/menu.kti index ab9816f4..968aa5a5 100644 --- a/Tables/Input/menu.kti +++ b/Tables/Input/menu.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mm/common.kti b/Tables/Input/mm/common.kti index 6af4ca38..2c0fff63 100644 --- a/Tables/Input/mm/common.kti +++ b/Tables/Input/mm/common.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mm/pocket.ktb b/Tables/Input/mm/pocket.ktb index edf60f1f..1ee4e76f 100644 --- a/Tables/Input/mm/pocket.ktb +++ b/Tables/Input/mm/pocket.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mm/smart.ktb b/Tables/Input/mm/smart.ktb index dadda86f..6799d8ce 100644 --- a/Tables/Input/mm/smart.ktb +++ b/Tables/Input/mm/smart.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/bd1_3.ktb b/Tables/Input/mt/bd1_3.ktb index b4b68ad2..1ac7d9e4 100644 --- a/Tables/Input/mt/bd1_3.ktb +++ b/Tables/Input/mt/bd1_3.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/bd1_3.kti b/Tables/Input/mt/bd1_3.kti index b1029cdf..38b97b99 100644 --- a/Tables/Input/mt/bd1_3.kti +++ b/Tables/Input/mt/bd1_3.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/bd1_3s.ktb b/Tables/Input/mt/bd1_3s.ktb index bb55c64c..966085e8 100644 --- a/Tables/Input/mt/bd1_3s.ktb +++ b/Tables/Input/mt/bd1_3s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/bd1_6.ktb b/Tables/Input/mt/bd1_6.ktb index e6888ceb..423b18a7 100644 --- a/Tables/Input/mt/bd1_6.ktb +++ b/Tables/Input/mt/bd1_6.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/bd1_6.kti b/Tables/Input/mt/bd1_6.kti index 1eda691c..1f386f60 100644 --- a/Tables/Input/mt/bd1_6.kti +++ b/Tables/Input/mt/bd1_6.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/bd1_6s.ktb b/Tables/Input/mt/bd1_6s.ktb index 16b0ccbb..dd374ced 100644 --- a/Tables/Input/mt/bd1_6s.ktb +++ b/Tables/Input/mt/bd1_6s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/bd2.ktb b/Tables/Input/mt/bd2.ktb index 753076e0..cbdae879 100644 --- a/Tables/Input/mt/bd2.ktb +++ b/Tables/Input/mt/bd2.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/mt/status.kti b/Tables/Input/mt/status.kti index 3633810a..361dcd84 100644 --- a/Tables/Input/mt/status.kti +++ b/Tables/Input/mt/status.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/np/all.ktb b/Tables/Input/np/all.ktb index 32aef94b..5dbb99c4 100644 --- a/Tables/Input/np/all.ktb +++ b/Tables/Input/np/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pg/all.ktb b/Tables/Input/pg/all.ktb index 1680464e..876f687d 100644 --- a/Tables/Input/pg/all.ktb +++ b/Tables/Input/pg/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/2d_l.ktb b/Tables/Input/pm/2d_l.ktb index 27413af2..7ff6b10a 100644 --- a/Tables/Input/pm/2d_l.ktb +++ b/Tables/Input/pm/2d_l.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/2d_s.ktb b/Tables/Input/pm/2d_s.ktb index 1b0e34b3..056685bb 100644 --- a/Tables/Input/pm/2d_s.ktb +++ b/Tables/Input/pm/2d_s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/bar.kti b/Tables/Input/pm/bar.kti index d355be3e..cf2bcdb5 100644 --- a/Tables/Input/pm/bar.kti +++ b/Tables/Input/pm/bar.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/c.ktb b/Tables/Input/pm/c.ktb index e07492a2..4669d6c3 100644 --- a/Tables/Input/pm/c.ktb +++ b/Tables/Input/pm/c.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/c_486.ktb b/Tables/Input/pm/c_486.ktb index dcb01ed3..1fc94e5f 100644 --- a/Tables/Input/pm/c_486.ktb +++ b/Tables/Input/pm/c_486.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el2d_80s.ktb b/Tables/Input/pm/el2d_80s.ktb index 2e8fbbfc..db7da4ed 100644 --- a/Tables/Input/pm/el2d_80s.ktb +++ b/Tables/Input/pm/el2d_80s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el40c.ktb b/Tables/Input/pm/el40c.ktb index e31c8b05..28eef862 100644 --- a/Tables/Input/pm/el40c.ktb +++ b/Tables/Input/pm/el40c.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el40s.ktb b/Tables/Input/pm/el40s.ktb index d0033c1a..3bd9db02 100644 --- a/Tables/Input/pm/el40s.ktb +++ b/Tables/Input/pm/el40s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el60c.ktb b/Tables/Input/pm/el60c.ktb index 1ba594c4..62316a1d 100644 --- a/Tables/Input/pm/el60c.ktb +++ b/Tables/Input/pm/el60c.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el66s.ktb b/Tables/Input/pm/el66s.ktb index 579258d9..1045c984 100644 --- a/Tables/Input/pm/el66s.ktb +++ b/Tables/Input/pm/el66s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el70s.ktb b/Tables/Input/pm/el70s.ktb index 0627d42b..0453d15b 100644 --- a/Tables/Input/pm/el70s.ktb +++ b/Tables/Input/pm/el70s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el80_ii.ktb b/Tables/Input/pm/el80_ii.ktb index f5d4debb..b3cfbc30 100644 --- a/Tables/Input/pm/el80_ii.ktb +++ b/Tables/Input/pm/el80_ii.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el80c.ktb b/Tables/Input/pm/el80c.ktb index 1add5670..ac46b5fd 100644 --- a/Tables/Input/pm/el80c.ktb +++ b/Tables/Input/pm/el80c.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el80s.ktb b/Tables/Input/pm/el80s.ktb index af52e2b5..5b3923a7 100644 --- a/Tables/Input/pm/el80s.ktb +++ b/Tables/Input/pm/el80s.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el_2d_40.ktb b/Tables/Input/pm/el_2d_40.ktb index dea9142d..44ce7b2d 100644 --- a/Tables/Input/pm/el_2d_40.ktb +++ b/Tables/Input/pm/el_2d_40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el_2d_66.ktb b/Tables/Input/pm/el_2d_66.ktb index cb0ab4e4..b728f29d 100644 --- a/Tables/Input/pm/el_2d_66.ktb +++ b/Tables/Input/pm/el_2d_66.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el_2d_80.ktb b/Tables/Input/pm/el_2d_80.ktb index fa087af4..01f963ab 100644 --- a/Tables/Input/pm/el_2d_80.ktb +++ b/Tables/Input/pm/el_2d_80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el_40_p.ktb b/Tables/Input/pm/el_40_p.ktb index f4c8eda6..3cf21530 100644 --- a/Tables/Input/pm/el_40_p.ktb +++ b/Tables/Input/pm/el_40_p.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/el_80.ktb b/Tables/Input/pm/el_80.ktb index dc792d16..2afd8a50 100644 --- a/Tables/Input/pm/el_80.ktb +++ b/Tables/Input/pm/el_80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/elb_tr_20.ktb b/Tables/Input/pm/elb_tr_20.ktb index c6b2398b..6d6f1ef2 100644 --- a/Tables/Input/pm/elb_tr_20.ktb +++ b/Tables/Input/pm/elb_tr_20.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/elb_tr_32.ktb b/Tables/Input/pm/elb_tr_32.ktb index 4158aa33..2177065d 100644 --- a/Tables/Input/pm/elb_tr_32.ktb +++ b/Tables/Input/pm/elb_tr_32.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/elba_20.ktb b/Tables/Input/pm/elba_20.ktb index 79d7ca80..7a63fabb 100644 --- a/Tables/Input/pm/elba_20.ktb +++ b/Tables/Input/pm/elba_20.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/elba_32.ktb b/Tables/Input/pm/elba_32.ktb index b8729b0d..644f597b 100644 --- a/Tables/Input/pm/elba_32.ktb +++ b/Tables/Input/pm/elba_32.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/front13.kti b/Tables/Input/pm/front13.kti index af5e8185..6bf2e880 100644 --- a/Tables/Input/pm/front13.kti +++ b/Tables/Input/pm/front13.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/front9.kti b/Tables/Input/pm/front9.kti index 6ad38b2f..5ce5e691 100644 --- a/Tables/Input/pm/front9.kti +++ b/Tables/Input/pm/front9.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/ib_80.ktb b/Tables/Input/pm/ib_80.ktb index 5d58d582..52f44829 100644 --- a/Tables/Input/pm/ib_80.ktb +++ b/Tables/Input/pm/ib_80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/keyboard.kti b/Tables/Input/pm/keyboard.kti index ab2b4403..ebdc064d 100644 --- a/Tables/Input/pm/keyboard.kti +++ b/Tables/Input/pm/keyboard.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/keys.kti b/Tables/Input/pm/keys.kti index 2c240fcb..b7e2dfe8 100644 --- a/Tables/Input/pm/keys.kti +++ b/Tables/Input/pm/keys.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/live.ktb b/Tables/Input/pm/live.ktb index 4e4c2c11..230ea38c 100644 --- a/Tables/Input/pm/live.ktb +++ b/Tables/Input/pm/live.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/routing.kti b/Tables/Input/pm/routing.kti index ebe2df27..18c53c38 100644 --- a/Tables/Input/pm/routing.kti +++ b/Tables/Input/pm/routing.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/status0.kti b/Tables/Input/pm/status0.kti index cf435523..2acc1aaf 100644 --- a/Tables/Input/pm/status0.kti +++ b/Tables/Input/pm/status0.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/status13.kti b/Tables/Input/pm/status13.kti index 3e50240b..e515f19e 100644 --- a/Tables/Input/pm/status13.kti +++ b/Tables/Input/pm/status13.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/status2.kti b/Tables/Input/pm/status2.kti index ca9461c5..f3d10be7 100644 --- a/Tables/Input/pm/status2.kti +++ b/Tables/Input/pm/status2.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/status20.kti b/Tables/Input/pm/status20.kti index 1e5d954c..e74727e0 100644 --- a/Tables/Input/pm/status20.kti +++ b/Tables/Input/pm/status20.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/status22.kti b/Tables/Input/pm/status22.kti index 282f6895..be336822 100644 --- a/Tables/Input/pm/status22.kti +++ b/Tables/Input/pm/status22.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/status4.kti b/Tables/Input/pm/status4.kti index 4b110334..c36d3f6e 100644 --- a/Tables/Input/pm/status4.kti +++ b/Tables/Input/pm/status4.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/switches.kti b/Tables/Input/pm/switches.kti index 6443351a..1cdd8360 100644 --- a/Tables/Input/pm/switches.kti +++ b/Tables/Input/pm/switches.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/pm/trio.ktb b/Tables/Input/pm/trio.ktb index 7960be76..16ef22e9 100644 --- a/Tables/Input/pm/trio.ktb +++ b/Tables/Input/pm/trio.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/sk/bdp.ktb b/Tables/Input/sk/bdp.ktb index 809c0a26..feb38441 100644 --- a/Tables/Input/sk/bdp.ktb +++ b/Tables/Input/sk/bdp.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/sk/ntk.ktb b/Tables/Input/sk/ntk.ktb index 8c9bb17e..257901cd 100644 --- a/Tables/Input/sk/ntk.ktb +++ b/Tables/Input/sk/ntk.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/toggle.kti b/Tables/Input/toggle.kti index 45ad4a88..ea3b76a1 100644 --- a/Tables/Input/toggle.kti +++ b/Tables/Input/toggle.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/nav.kti b/Tables/Input/ts/nav.kti index da739733..76ea258c 100644 --- a/Tables/Input/ts/nav.kti +++ b/Tables/Input/ts/nav.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/nav20.ktb b/Tables/Input/ts/nav20.ktb index 6981c97c..68482a75 100644 --- a/Tables/Input/ts/nav20.ktb +++ b/Tables/Input/ts/nav20.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/nav40.ktb b/Tables/Input/ts/nav40.ktb index 7e025570..30995787 100644 --- a/Tables/Input/ts/nav40.ktb +++ b/Tables/Input/ts/nav40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/nav80.ktb b/Tables/Input/ts/nav80.ktb index a11baf9a..0a284170 100644 --- a/Tables/Input/ts/nav80.ktb +++ b/Tables/Input/ts/nav80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/nav_large.kti b/Tables/Input/ts/nav_large.kti index 8c7f95fd..88fc4c44 100644 --- a/Tables/Input/ts/nav_large.kti +++ b/Tables/Input/ts/nav_large.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/nav_small.kti b/Tables/Input/ts/nav_small.kti index 0dc2e2bc..0ab02653 100644 --- a/Tables/Input/ts/nav_small.kti +++ b/Tables/Input/ts/nav_small.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/pb.kti b/Tables/Input/ts/pb.kti index 4465b991..35ea6145 100644 --- a/Tables/Input/ts/pb.kti +++ b/Tables/Input/ts/pb.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/pb40.ktb b/Tables/Input/ts/pb40.ktb index 5b930a55..4cb8ebcd 100644 --- a/Tables/Input/ts/pb40.ktb +++ b/Tables/Input/ts/pb40.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/pb65.ktb b/Tables/Input/ts/pb65.ktb index 0feb9b34..723bd3f8 100644 --- a/Tables/Input/ts/pb65.ktb +++ b/Tables/Input/ts/pb65.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/pb80.ktb b/Tables/Input/ts/pb80.ktb index eb700c66..1471bf9e 100644 --- a/Tables/Input/ts/pb80.ktb +++ b/Tables/Input/ts/pb80.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/pb_large.kti b/Tables/Input/ts/pb_large.kti index 512f0387..a57bfbff 100644 --- a/Tables/Input/ts/pb_large.kti +++ b/Tables/Input/ts/pb_large.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/pb_small.kti b/Tables/Input/ts/pb_small.kti index a3c394dd..37c62fe9 100644 --- a/Tables/Input/ts/pb_small.kti +++ b/Tables/Input/ts/pb_small.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/ts/routing.kti b/Tables/Input/ts/routing.kti index 0e721b2c..d76f4a0f 100644 --- a/Tables/Input/ts/routing.kti +++ b/Tables/Input/ts/routing.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/vo/all.ktb b/Tables/Input/vo/all.ktb index c2603891..f7489839 100644 --- a/Tables/Input/vo/all.ktb +++ b/Tables/Input/vo/all.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/vo/all.kti b/Tables/Input/vo/all.kti index 33ed7c51..c14a9a04 100644 --- a/Tables/Input/vo/all.kti +++ b/Tables/Input/vo/all.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Input/vo/bp.ktb b/Tables/Input/vo/bp.ktb index b3d26c81..18fa4ea4 100644 --- a/Tables/Input/vo/bp.ktb +++ b/Tables/Input/vo/bp.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/braille.ktb b/Tables/Keyboard/braille.ktb index 77a435cb..8cea463e 100644 --- a/Tables/Keyboard/braille.ktb +++ b/Tables/Keyboard/braille.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/braille.kti b/Tables/Keyboard/braille.kti index 1ab0dccf..06bf5e3b 100644 --- a/Tables/Keyboard/braille.kti +++ b/Tables/Keyboard/braille.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/desktop.ktb b/Tables/Keyboard/desktop.ktb index 416cda1a..91b127f4 100644 --- a/Tables/Keyboard/desktop.ktb +++ b/Tables/Keyboard/desktop.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/desktop.kti b/Tables/Keyboard/desktop.kti index bba658f6..72275ede 100644 --- a/Tables/Keyboard/desktop.kti +++ b/Tables/Keyboard/desktop.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/keypad.ktb b/Tables/Keyboard/keypad.ktb index 31961d44..6d1ff1c1 100644 --- a/Tables/Keyboard/keypad.ktb +++ b/Tables/Keyboard/keypad.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/kp_say.kti b/Tables/Keyboard/kp_say.kti index 52625dc3..4a030002 100644 --- a/Tables/Keyboard/kp_say.kti +++ b/Tables/Keyboard/kp_say.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/kp_speak.kti b/Tables/Keyboard/kp_speak.kti index f4f3fe6e..7088d413 100644 --- a/Tables/Keyboard/kp_speak.kti +++ b/Tables/Keyboard/kp_speak.kti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/laptop.ktb b/Tables/Keyboard/laptop.ktb index 25b7f954..74dc06dc 100644 --- a/Tables/Keyboard/laptop.ktb +++ b/Tables/Keyboard/laptop.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Keyboard/sun_type6.ktb b/Tables/Keyboard/sun_type6.ktb index 68a4e650..428e9718 100644 --- a/Tables/Keyboard/sun_type6.ktb +++ b/Tables/Keyboard/sun_type6.ktb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ar.ttb b/Tables/Text/ar.ttb index c52b4e6d..aaec0b16 100644 --- a/Tables/Text/ar.ttb +++ b/Tables/Text/ar.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/as.ttb b/Tables/Text/as.ttb index 9663bf07..21d0dd16 100644 --- a/Tables/Text/as.ttb +++ b/Tables/Text/as.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ascii-basic.tti b/Tables/Text/ascii-basic.tti index b5d4aee4..a187249b 100644 --- a/Tables/Text/ascii-basic.tti +++ b/Tables/Text/ascii-basic.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/awa.ttb b/Tables/Text/awa.ttb index 63ba06cc..e8fb9263 100644 --- a/Tables/Text/awa.ttb +++ b/Tables/Text/awa.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/bengali.tti b/Tables/Text/bengali.tti index 7f6bfd9f..9f272a97 100644 --- a/Tables/Text/bengali.tti +++ b/Tables/Text/bengali.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/bg.ttb b/Tables/Text/bg.ttb index 7ece1096..9c033550 100644 --- a/Tables/Text/bg.ttb +++ b/Tables/Text/bg.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/bh.ttb b/Tables/Text/bh.ttb index e49d3999..5a9d0f1b 100644 --- a/Tables/Text/bh.ttb +++ b/Tables/Text/bh.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/blocks.tti b/Tables/Text/blocks.tti index be178e81..62cb8dc3 100644 --- a/Tables/Text/blocks.tti +++ b/Tables/Text/blocks.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/bn.ttb b/Tables/Text/bn.ttb index c2a27317..2f0a8083 100644 --- a/Tables/Text/bn.ttb +++ b/Tables/Text/bn.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/bo.ttb b/Tables/Text/bo.ttb index 7bea6e10..f7f63d3c 100644 --- a/Tables/Text/bo.ttb +++ b/Tables/Text/bo.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/boxes.tti b/Tables/Text/boxes.tti index 7f9889d3..89dcf5ca 100644 --- a/Tables/Text/boxes.tti +++ b/Tables/Text/boxes.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/bra.ttb b/Tables/Text/bra.ttb index 8d34a0a6..f6c181d0 100644 --- a/Tables/Text/bra.ttb +++ b/Tables/Text/bra.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/brf.ttb b/Tables/Text/brf.ttb index 893c7f52..10fd1bb6 100644 --- a/Tables/Text/brf.ttb +++ b/Tables/Text/brf.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/common.tti b/Tables/Text/common.tti index 0f0326b3..b63908b1 100644 --- a/Tables/Text/common.tti +++ b/Tables/Text/common.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/cs.ttb b/Tables/Text/cs.ttb index 4cd75525..9f6de434 100644 --- a/Tables/Text/cs.ttb +++ b/Tables/Text/cs.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ctl-latin.tti b/Tables/Text/ctl-latin.tti index a2949177..570dfead 100644 --- a/Tables/Text/ctl-latin.tti +++ b/Tables/Text/ctl-latin.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/cy.ttb b/Tables/Text/cy.ttb index 2aadac6c..28927110 100644 --- a/Tables/Text/cy.ttb +++ b/Tables/Text/cy.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/da-1252.ttb b/Tables/Text/da-1252.ttb index f7b88322..06a17645 100644 --- a/Tables/Text/da-1252.ttb +++ b/Tables/Text/da-1252.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/da-lt.ttb b/Tables/Text/da-lt.ttb index 2e6cb8fc..d7b75c1c 100644 --- a/Tables/Text/da-lt.ttb +++ b/Tables/Text/da-lt.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/da.ttb b/Tables/Text/da.ttb index 746451b1..eaba09fc 100644 --- a/Tables/Text/da.ttb +++ b/Tables/Text/da.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/de-chess.tti b/Tables/Text/de-chess.tti index 041db42c..3c62545f 100644 --- a/Tables/Text/de-chess.tti +++ b/Tables/Text/de-chess.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/de.ttb b/Tables/Text/de.ttb index c60e7154..98e7de30 100644 --- a/Tables/Text/de.ttb +++ b/Tables/Text/de.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/devanagari.tti b/Tables/Text/devanagari.tti index ebfce316..e48c2727 100644 --- a/Tables/Text/devanagari.tti +++ b/Tables/Text/devanagari.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/dra.ttb b/Tables/Text/dra.ttb index 2d3bde05..c4d43782 100644 --- a/Tables/Text/dra.ttb +++ b/Tables/Text/dra.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/el.ttb b/Tables/Text/el.ttb index 75ba5f9a..b07c46d2 100644 --- a/Tables/Text/el.ttb +++ b/Tables/Text/el.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/en-chess.tti b/Tables/Text/en-chess.tti index 855a14e8..b804198a 100644 --- a/Tables/Text/en-chess.tti +++ b/Tables/Text/en-chess.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/en-na-ascii.tti b/Tables/Text/en-na-ascii.tti index 00f5378f..96477153 100644 --- a/Tables/Text/en-na-ascii.tti +++ b/Tables/Text/en-na-ascii.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/en-nabcc.ttb b/Tables/Text/en-nabcc.ttb index 7f4c9c99..0ad75121 100644 --- a/Tables/Text/en-nabcc.ttb +++ b/Tables/Text/en-nabcc.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/en.ttb b/Tables/Text/en.ttb index b57cfe31..9ba9a394 100644 --- a/Tables/Text/en.ttb +++ b/Tables/Text/en.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/en_CA.ttb b/Tables/Text/en_CA.ttb index db7ac126..1dea18e0 100644 --- a/Tables/Text/en_CA.ttb +++ b/Tables/Text/en_CA.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/en_GB.ttb b/Tables/Text/en_GB.ttb index d39df1d5..82d9d072 100644 --- a/Tables/Text/en_GB.ttb +++ b/Tables/Text/en_GB.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/en_US.ttb b/Tables/Text/en_US.ttb index 11b1bce8..464654da 100644 --- a/Tables/Text/en_US.ttb +++ b/Tables/Text/en_US.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/eo.ttb b/Tables/Text/eo.ttb index 5338b421..cf87a3d5 100644 --- a/Tables/Text/eo.ttb +++ b/Tables/Text/eo.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/es.ttb b/Tables/Text/es.ttb index 7b2a99eb..f9eb028f 100644 --- a/Tables/Text/es.ttb +++ b/Tables/Text/es.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/et.ttb b/Tables/Text/et.ttb index 5cb26fb7..f2f73c5b 100644 --- a/Tables/Text/et.ttb +++ b/Tables/Text/et.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/fi.ttb b/Tables/Text/fi.ttb index 835db2fd..1d1a1054 100644 --- a/Tables/Text/fi.ttb +++ b/Tables/Text/fi.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -73,39 +73,6 @@ char \x7B (12 4 6 ) # 7B ⠫ { [LEFT CURLY BRACKET] char \x7C ( 456 ) # 7C ⠸ | [VERTICAL LINE] char \x7D (12 456 ) # 7D ⠻ } [RIGHT CURLY BRACKET] char \x7E ( 45 ) # 7E ⠘ ~ [TILDE] -char \x7F (1234 8) # 7F ⢏ [DELETE] -char \x80 ( 23 67 ) # 80 ⡦ [] -char \x81 (12 56 ) # 81 ⠳ [] -char \x82 (123456 ) # 82 ⠿ [BREAK PERMITTED HERE] -char \x83 ( 23 678) # 83 ⣦ [NO BREAK HERE] -char \x84 ( 345 ) # 84 ⠜ [] -char \x85 ( 2345 8) # 85 ⢞ [NEXT LINE (NEL)] -char \x86 (1 6 ) # 86 ⠡ [START OF SELECTED AREA] -char \x87 (1234567 ) # 87 ⡿ [END OF SELECTED AREA] -char \x88 (12345678) # 88 ⣿ [CHARACTER TABULATION SET] -char \x89 ( 678) # 89 ⣠ [CHARACTER TABULATION WITH JUSTIFICATION] -char \x8A (12345 8) # 8A ⢟ [LINE TABULATION SET] -char \x8B ( 3 56 8) # 8B ⢴ [PARTIAL LINE FORWARD] -char \x8C ( 45 8) # 8C ⢘ [PARTIAL LINE BACKWARD] -char \x8D ( 4567 ) # 8D ⡸ [REVERSE LINE FEED] -char \x8E ( 345 7 ) # 8E ⡜ [SINGLE SHIFT TWO] -char \x8F (1 67 ) # 8F ⡡ [SINGLE SHIFT THREE] -char \x90 (1234567 ) # 90 ⡿ [DEVICE CONTROL STRING] -char \x91 (1 34 8) # 91 ⢍ [PRIVATE USE ONE] -char \x92 (12 56 8) # 92 ⢳ [PRIVATE USE TWO] -char \x93 ( 3 567 ) # 93 ⡴ [SET TRANSMIT STATE] -char \x94 ( 2 4 6 ) # 94 ⠪ [CANCEL CHARACTER] -char \x95 ( 67 ) # 95 ⡠ [MESSAGE WAITING] -char \x96 (123456 8) # 96 ⢿ [START OF GUARDED AREA] -char \x97 ( 3 6 8) # 97 ⢤ [END OF GUARDED AREA] -char \x98 ( 2 456 8) # 98 ⢺ [START OF STRING] -char \x99 ( 2 4 67 ) # 99 ⡪ [] -char \x9A (12 567 ) # 9A ⡳ [SINGLE CHARACTER INTRODUCER] -char \x9B ( 4 7 ) # 9B ⡈ [CONTROL SEQUENCE INTRODUCER] -char \x9C ( 7 ) # 9C ⡀ [STRING TERMINATOR] -char \x9D ( 45 7 ) # 9D ⡘ [OPERATING SYSTEM COMMAND] -char \x9E (1 34 6 8) # 9E ⢭ [PRIVACY MESSAGE] -char \x9F (1 345 8) # 9F ⢝ [APPLICATION PROGRAM COMMAND] char \xA1 ( 23 5 8) # A1 ⢖ ¡ [INVERTED EXCLAMATION MARK] char \xA2 (1 3 56 8) # A2 ⢵ ¢ [CENT SIGN] char \xA3 (123 8) # A3 ⢇ £ [POUND SIGN] diff --git a/Tables/Text/fr-2007.ttb b/Tables/Text/fr-2007.ttb index 52b6be37..c3e77224 100644 --- a/Tables/Text/fr-2007.ttb +++ b/Tables/Text/fr-2007.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/fr-cbifs.ttb b/Tables/Text/fr-cbifs.ttb index a1e054da..5a12fe10 100644 --- a/Tables/Text/fr-cbifs.ttb +++ b/Tables/Text/fr-cbifs.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/fr-vs.ttb b/Tables/Text/fr-vs.ttb index d60144ff..9a749412 100644 --- a/Tables/Text/fr-vs.ttb +++ b/Tables/Text/fr-vs.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/fr.ttb b/Tables/Text/fr.ttb index 3dcd9676..577d5f11 100644 --- a/Tables/Text/fr.ttb +++ b/Tables/Text/fr.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/fr_CA.ttb b/Tables/Text/fr_CA.ttb index bbd93fe3..5a2953c9 100644 --- a/Tables/Text/fr_CA.ttb +++ b/Tables/Text/fr_CA.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/fr_FR.ttb b/Tables/Text/fr_FR.ttb index 7f07a3a7..28482e22 100644 --- a/Tables/Text/fr_FR.ttb +++ b/Tables/Text/fr_FR.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ga.ttb b/Tables/Text/ga.ttb index 12c013c7..b576c7f2 100644 --- a/Tables/Text/ga.ttb +++ b/Tables/Text/ga.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/gd.ttb b/Tables/Text/gd.ttb index c626dbe7..9af8050f 100644 --- a/Tables/Text/gd.ttb +++ b/Tables/Text/gd.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/gon.ttb b/Tables/Text/gon.ttb index a319500a..31e498f2 100644 --- a/Tables/Text/gon.ttb +++ b/Tables/Text/gon.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/greek.tti b/Tables/Text/greek.tti index bc189b3e..20d29ca3 100644 --- a/Tables/Text/greek.tti +++ b/Tables/Text/greek.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/gu.ttb b/Tables/Text/gu.ttb index 48056e8e..bad4b7ef 100644 --- a/Tables/Text/gu.ttb +++ b/Tables/Text/gu.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/gujarati.tti b/Tables/Text/gujarati.tti index dedc4f0c..87ad9eea 100644 --- a/Tables/Text/gujarati.tti +++ b/Tables/Text/gujarati.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/gurmukhi.tti b/Tables/Text/gurmukhi.tti index 37e2cbd0..d8ec5b34 100644 --- a/Tables/Text/gurmukhi.tti +++ b/Tables/Text/gurmukhi.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/he.ttb b/Tables/Text/he.ttb index 50d3b198..d1def361 100644 --- a/Tables/Text/he.ttb +++ b/Tables/Text/he.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/hi.ttb b/Tables/Text/hi.ttb index 5446b071..5822cc85 100644 --- a/Tables/Text/hi.ttb +++ b/Tables/Text/hi.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/hr.ttb b/Tables/Text/hr.ttb index 9f2e2b96..8c339d15 100644 --- a/Tables/Text/hr.ttb +++ b/Tables/Text/hr.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/hu.ttb b/Tables/Text/hu.ttb index 72d7a93c..639760ae 100644 --- a/Tables/Text/hu.ttb +++ b/Tables/Text/hu.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/hy.ttb b/Tables/Text/hy.ttb index a23066c1..a6587458 100644 --- a/Tables/Text/hy.ttb +++ b/Tables/Text/hy.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/is.ttb b/Tables/Text/is.ttb index 27d15679..fdbd4b1a 100644 --- a/Tables/Text/is.ttb +++ b/Tables/Text/is.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/it.ttb b/Tables/Text/it.ttb index fc628b0c..1bd348c0 100644 --- a/Tables/Text/it.ttb +++ b/Tables/Text/it.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/kannada.tti b/Tables/Text/kannada.tti index eb49a61d..07ddedb1 100644 --- a/Tables/Text/kannada.tti +++ b/Tables/Text/kannada.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/kha.ttb b/Tables/Text/kha.ttb index 82cf5ae1..f5774640 100644 --- a/Tables/Text/kha.ttb +++ b/Tables/Text/kha.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/kn.ttb b/Tables/Text/kn.ttb index 70bf5eaa..f91faceb 100644 --- a/Tables/Text/kn.ttb +++ b/Tables/Text/kn.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/kok.ttb b/Tables/Text/kok.ttb index f96fac9a..a44be45d 100644 --- a/Tables/Text/kok.ttb +++ b/Tables/Text/kok.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/kru.ttb b/Tables/Text/kru.ttb index d56ee1df..0a25a548 100644 --- a/Tables/Text/kru.ttb +++ b/Tables/Text/kru.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/lt.ttb b/Tables/Text/lt.ttb index ed2d772d..16556c25 100644 --- a/Tables/Text/lt.ttb +++ b/Tables/Text/lt.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -18,27 +18,172 @@ # BRLTTY Text Table - Lituanian # -# Samuel Thibault -# -# This table is based on the Unesco report on the progress of unification of -# braille writing « L'ÉCRITURE BRAILLE DANS LE MONDE », by Sir Clutha -# MACKENZIE: http://unesdoc.unesco.org/images/0013/001352/135251fo.pdf -# The document is dated 1954, so this table may be quite outdated. +# Copyright (C) 2017 Rimas Kudelis +# +# The Lithuanian 8-dot Braille writing system is described in a decree of the Minister of +# Social Security and Labor, called "Dėl vieningos aštuonių taškų Brailio rašto sistemos +# naudojimo tvarkos aprašo patvirtinimo", which is in effect since 2011-04-13. Document +# number is A1-183. At the time of writing this file, the document was accessible at +# https://www.e-tar.lt/portal/lt/legalAct/TAR.443D667CA047 . +# The document is referred to as "the standard" below. +# +# The standard maps ISO-8859-13 character set to 8-dot Braille writing system. However, +# even though it defines different mappings for literary and computer braille modes, it +# doesn't seem like the authors had a good understanding of why these two modes exist +# and how they differ. Furthermore, the standard contains a few errors (incorrectly named +# characters as well as mapping conflicts). I would say it needs further improvements. +# +# This file is based on the standard, but does not exactly follow it. Some standard +# definitions are commented out, some changed, and some extra ones are added. +# +# This table is based on the respective liblouis table. -# the standard representations for the letters of the Latin alphabet + +### +### LETTERS +### + +# Standard representations for the letters of the Latin alphabet include ltr-latin.tti -# lowercase accented letters +# Lowercase accented letters +char \u0105 (1 6 ) # ⠡ ą [LATIN SMALL LETTER A WITH OGONEK] char \u010D (1 4 6 ) # ⠩ č [LATIN SMALL LETTER C WITH CARON] +char \u0119 (1 56 ) # ⠱ ę [LATIN SMALL LETTER E WITH OGONEK] +char \u0117 ( 345 ) # ⠜ ė [LATIN SMALL LETTER E WITH DOT ABOVE] +char \u012F ( 2 4 6 ) # ⠪ į [LATIN SMALL LETTER I WITH OGONEK] char \u0161 ( 234 6 ) # ⠮ š [LATIN SMALL LETTER S WITH CARON] +char \u0173 ( 34 6 ) # ⠬ ų [LATIN SMALL LETTER U WITH OGONEK] +char \u016B (12 56 ) # ⠳ ū [LATIN SMALL LETTER U WITH MACRON] +char \u017E (12 6 ) # ⠣ ž [LATIN SMALL LETTER Z WITH MACRON] -# lowercase accented letters +# Uppercase accented letters +char \u0104 (1 67 ) # ⡡ Ą [LATIN CAPITAL LETTER A WITH OGONEK] char \u010C (1 4 67 ) # ⡩ Č [LATIN CAPITAL LETTER C WITH CARON] +char \u0118 (1 567 ) # ⡱ Ę [LATIN CAPITAL LETTER E WITH OGONEK] +char \u0116 ( 345 7 ) # ⡜ Ė [LATIN CAPITAL LETTER E WITH DOT ABOVE] +char \u012E ( 2 4 67 ) # ⡪ Į [LATIN CAPITAL LETTER I WITH OGONEK] char \u0160 ( 234 67 ) # ⡮ Š [LATIN CAPITAL LETTER S WITH CARON] +char \u0172 ( 34 67 ) # ⡬ Ų [LATIN CAPITAL LETTER U WITH OGONEK] +char \u016A (12 567 ) # ⡳ Ū [LATIN CAPITAL LETTER U WITH MACRON] +char \u017D (12 67 ) # ⡣ Ž [LATIN CAPITAL LETTER Z WITH CARON] + -# the numbers 0-9 are represented by the letters j,a-i with dot 8 added +### +### DIGITS +### + +# Digits 0-9 are represented by the letters j,a-i with dot 8 added include num-dot8.tti -include punc-basic.tti + +### +### PUNCTUATION +### + +char \x2C ( 2 ) # ⠂ , [COMMA] +char \x2E ( 2 56 ) # ⠲ . [FULL STOP] +char \x3F ( 2 6 ) # ⠢ ? [QUESTION MARK] +char \x21 ( 23 5 ) # ⠖ ! [EXCLAMATION MARK] +char \x3A ( 2 5 ) # ⠒ : [COLON] +char \x3B ( 23 ) # ⠆ ; [SEMICOLON] +char \x22 ( 4 ) # ⠈ " [QUOTATION MARK] +char \x27 ( 3 ) # ⠄ ' [APOSTROPHE] +# The following character is defined as 134568 in the standard, but that is hardly useful. +# According to Unicode, it is the preferred character to use for apostrophe, hence +# defining it as one here. +alias \u2019 \x27 # ’ [RIGHT SINGLE QUOTATION MARK] + +char \x28 ( 23 567 ) # ⡶ ( [LEFT PARENTHESIS] +char \x29 ( 23 56 8) # ⢶ ) [RIGHT PARENTHESIS] +char \x5B (123 56 ) # ⠷ [ LEFT SQUARE BRACKET +char \x5D ( 23456 ) # ⠾ ] RIGHT SQUARE BRACKET +char \x7B ( 2 4 678) # ⣪ { LEFT CURLY BRACKET +char \x7D (1 3 5 78) # ⣕ } RIGHT CURLY BRACKET + +char \x2D ( 3 6 ) # ⠤ - [HYPHEN-MINUS] +# Soft hyphen is defined as 368 in the standard. +alias \xAD \x2D # ­ [SOFT HYPHEN] +# The following characters are not defined in the standard. +alias \u2010 \x2D # ‐ [HYPHEN] +alias \u2011 \x2D # ‑ [NON-BREAKING HYPHEN] +alias \u2012 \x2D # ‒ [FIGURE DASH] +alias \u2013 \x2D # – [EN DASH] +alias \u2014 \x2D # — [EM DASH] +alias \u2015 \x2D # ― [HORIZONTAL BAR] + +# These are the typographically correct quotes in Lithuanian texts. +char \u201E ( 23 67 ) # ⡦ „ [DOUBLE LOW-9 QUOTATION MARK] +char \u201C ( 3 567 ) # ⡴ “ [LEFT DOUBLE QUOTATION MARK] +# The following characters are defined in the standard, because they exist in ISO-8859-13 +# character set, even though they should not be used in Lithuanian texts. +char \u201D ( 3 67 ) # ⡤ ” [RIGHT DOUBLE QUOTATION MARK] +char \xAB ( 5678) # ⣰ « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] +char \xBB ( 45 78) # ⣘ » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] + + +### +### MATHEMATICAL SYMBOLS +### + +char \x2B ( 23 5 8) # ⢖ + [PLUS SIGN] +# Real minus is not defined in the standard. +alias \u2212 \x2D # − [MINUS SIGN] +char \x3C ( 2 4 6 8) # ⢪ < [LESS-THAN SIGN] +char \x3D ( 23 56 ) # ⠶ = [EQUALS SIGN] +char \x3E (1 3 5 8) # ⢕ > [GREATER-THAN SIGN] +char \xB1 ( 23 5 78) # ⣖ ± [PLUS-MINUS SIGN] +char \xD7 ( 234 8) # ⢎ × MULTIPLICATION SIGN] +char \xF7 (12 5678) # ⣳ ÷ [DIVISION SIGN] + + +### +### OTHER CHARACTERS +### + +char \x23 ( 3456 ) # ⠼ # [NUMBER SIGN] +char \x24 ( 4 6 ) # ⠨ $ [DOLLAR SIGN] +char \x25 (123456 ) # ⠿ % [PERCENT SIGN] +char \x26 (1234 6 ) # ⠯ & [AMPERSAND] +char \x2A ( 3 5 ) # ⠔ * [ASTERISK] +char \x2F ( 34 ) # ⠌ / [SOLIDUS] +char \x40 ( 345 78) # ⣜ @ [COMMERCIAL AT] +char \x5C ( 34 7 ) # ⡌ \ [REVERSE SOLIDUS] +char \x5E ( 2 56 8) # ⢲ ^ [CIRCUMFLEX ACCENT] +char \x5F ( 4567 ) # ⡸ _ [LOW LINE] +char \x7C ( 456 ) # ⠸ | [VERTICAL LINE] +char \xA6 (1 456 ) # ⠹ ¦ [BROKEN BAR] +char \xA7 ( 34 6 8) # ⢬ § [SECTION SIGN] +char \xAC ( 5 ) # ⠐ ¬ [NOT SIGN] +char \xB5 (1 34 8) # ⢍ µ [MICRO SIGN] +char \xB6 (1234 8) # ⢏ ¶ [PILCROW SIGN] + +char \x60 ( 6 ) # ⠠ ` [GRAVE ACCENT] +char \x7E ( 2 6 8) # ⢢ ~ [TILDE] + +char \xA2 ( 5 8) # ⢐ ¢ [CENT SIGN] +char \xA3 ( 4 67 ) # ⡨ £ [POUND SIGN] +# Euro sign is not defined in the standard, but codepoint 0x80 of ISO-8859-13 is. +# In Windows-1257, 0x80 is the Euro sign. +# The unofficially distributed Lithuanian JAWS table specified all characters as +# ANSI codes, thus rendering Euro as 457. +# Not sure if I want to replicate that here though: who knows how this table will +# end up being used and for how long. Aliasing to E instead. +# char \u20AC ( 45 7 ) # ⡘ € [EURO SIGN] +alias \u20AC \x45 # € [EURO SIGN] + +char \xA4 ( 4 678) # ⣨ ¤ [CURRENCY SIGN] + +char \xA9 (1234 6 8) # ⢯ © COPYRIGHT SIGN +char \xAE (123 5 8) # ⢗ ® [REGISTERED SIGN] + +# Middle dot is unlikely to appear in text, except perhaps as a multiplication sign (dot operator). +char \xB7 ( 3 7 ) # ⡄ · [MIDDLE DOT] + +char \xB0 ( 456 8) # ⢸ ° [DEGREE SIGN] + +char \xB9 (1 78) # ⣁ ¹ [SUPERSCRIPT ONE] +char \xB2 (12 78) # ⣃ ² [SUPERSCRIPT TWO] +char \xB3 (1 4 78) # ⣉ ³ [SUPERSCRIPT THREE] include common.tti diff --git a/Tables/Text/ltr-alias.tti b/Tables/Text/ltr-alias.tti index 3c69ae7d..e736b00c 100644 --- a/Tables/Text/ltr-alias.tti +++ b/Tables/Text/ltr-alias.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ltr-cyrillic.tti b/Tables/Text/ltr-cyrillic.tti index e1f2ffd1..aacd2edc 100644 --- a/Tables/Text/ltr-cyrillic.tti +++ b/Tables/Text/ltr-cyrillic.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # @@ -53,6 +53,10 @@ char \u044D ( 2 4 6 ) # ⠪ э [CYRILLIC SMALL LETTER E] char \u044E (12 56 ) # ⠳ ю [CYRILLIC SMALL LETTER YU] char \u044F (12 4 6 ) # ⠫ я [CYRILLIC SMALL LETTER YA] char \u0451 (1 6 ) # ⠡ ё [CYRILLIC SMALL LETTER IO] +char \u0454 ( 345 ) # ⠜ є [CYRILLIC SMALL LETTER UKRAINIAN IE] +char \u0456 (1 3456 ) # ⠽ і [CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I] +char \u0457 (1 456 ) # ⠹ ї [CYRILLIC SMALL LETTER YI] +char \u0491 (12 456 ) # ⠻ ґ [CYRILLIC SMALL LETTER GHE WITH UPTURN] # uppercase letters char \u0410 (1 7 ) # ⡁ А [CYRILLIC CAPITAL LETTER A] @@ -88,6 +92,10 @@ char \u042D ( 2 4 67 ) # ⡪ Э [CYRILLIC CAPITAL LETTER E] char \u042E (12 567 ) # ⡳ Ю [CYRILLIC CAPITAL LETTER YU] char \u042F (12 4 67 ) # ⡫ Я [CYRILLIC CAPITAL LETTER YA] char \u0401 (1 67 ) # ⡡ Ё [CYRILLIC CAPITAL LETTER IO] +char \u0404 ( 345 7 ) # ⡜ Є [CYRILLIC CAPITAL LETTER UKRAINIAN IE] +char \u0406 (1 34567 ) # ⡽ І [CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I] +char \u0407 (1 4567 ). # ⡹ Ї [CYRILLIC CAPITAL LETTER YI] +char \u0490 (12 4567 ) # ⡻ Ґ [CYRILLIC CAPITAL LETTER GHE WITH UPTURN] # obsolete lowercase letters char \u0463 ( 345 ) # ⠜ ѣ [CYRILLIC SMALL LETTER YAT] diff --git a/Tables/Text/ltr-dot8.tti b/Tables/Text/ltr-dot8.tti index bfb97564..24955405 100644 --- a/Tables/Text/ltr-dot8.tti +++ b/Tables/Text/ltr-dot8.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ltr-latin.tti b/Tables/Text/ltr-latin.tti index 9a7afde2..c35ee28d 100644 --- a/Tables/Text/ltr-latin.tti +++ b/Tables/Text/ltr-latin.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ltr-tibetan.tti b/Tables/Text/ltr-tibetan.tti index 8f92f85c..cf76cd40 100644 --- a/Tables/Text/ltr-tibetan.tti +++ b/Tables/Text/ltr-tibetan.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/lv.ttb b/Tables/Text/lv.ttb index 7640aed4..581855a2 100644 --- a/Tables/Text/lv.ttb +++ b/Tables/Text/lv.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/malayalam.tti b/Tables/Text/malayalam.tti index 96af981b..7c93f7e3 100644 --- a/Tables/Text/malayalam.tti +++ b/Tables/Text/malayalam.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/mg.ttb b/Tables/Text/mg.ttb index 620383b4..ee978941 100644 --- a/Tables/Text/mg.ttb +++ b/Tables/Text/mg.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/mi.ttb b/Tables/Text/mi.ttb index 3c06fac1..9d246398 100644 --- a/Tables/Text/mi.ttb +++ b/Tables/Text/mi.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ml.ttb b/Tables/Text/ml.ttb index b14f909e..ca49d03f 100644 --- a/Tables/Text/ml.ttb +++ b/Tables/Text/ml.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/mni.ttb b/Tables/Text/mni.ttb index 068ba4d5..ff70bf26 100644 --- a/Tables/Text/mni.ttb +++ b/Tables/Text/mni.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/mr.ttb b/Tables/Text/mr.ttb index fca5bfbf..1b0f50d5 100644 --- a/Tables/Text/mr.ttb +++ b/Tables/Text/mr.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/mt.ttb b/Tables/Text/mt.ttb index 380ccae9..8fb3813b 100644 --- a/Tables/Text/mt.ttb +++ b/Tables/Text/mt.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/mun.ttb b/Tables/Text/mun.ttb index 385ce54f..a3f7702c 100644 --- a/Tables/Text/mun.ttb +++ b/Tables/Text/mun.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/mwr.ttb b/Tables/Text/mwr.ttb index b5618602..553587ef 100644 --- a/Tables/Text/mwr.ttb +++ b/Tables/Text/mwr.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ne.ttb b/Tables/Text/ne.ttb index 62898f40..fb3dbf74 100644 --- a/Tables/Text/ne.ttb +++ b/Tables/Text/ne.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/new.ttb b/Tables/Text/new.ttb index f713c964..5a0cd939 100644 --- a/Tables/Text/new.ttb +++ b/Tables/Text/new.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/nl.ttb b/Tables/Text/nl.ttb index e57a1d74..9c2ba194 100644 --- a/Tables/Text/nl.ttb +++ b/Tables/Text/nl.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/nl_BE.ttb b/Tables/Text/nl_BE.ttb index 83c9b124..7f99a670 100644 --- a/Tables/Text/nl_BE.ttb +++ b/Tables/Text/nl_BE.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/nl_NL.ttb b/Tables/Text/nl_NL.ttb index cf8853f4..a465cc43 100644 --- a/Tables/Text/nl_NL.ttb +++ b/Tables/Text/nl_NL.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/no-generic.ttb b/Tables/Text/no-generic.ttb index 726448ec..a5dce880 100644 --- a/Tables/Text/no-generic.ttb +++ b/Tables/Text/no-generic.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/no-oup.ttb b/Tables/Text/no-oup.ttb index 0f440b46..a412b1f7 100644 --- a/Tables/Text/no-oup.ttb +++ b/Tables/Text/no-oup.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/no.ttb b/Tables/Text/no.ttb index bc024584..763c87fb 100644 --- a/Tables/Text/no.ttb +++ b/Tables/Text/no.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/num-alias.tti b/Tables/Text/num-alias.tti index 3e8b2e06..cca45423 100644 --- a/Tables/Text/num-alias.tti +++ b/Tables/Text/num-alias.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/num-dot6.tti b/Tables/Text/num-dot6.tti index a543b5ee..083869e4 100644 --- a/Tables/Text/num-dot6.tti +++ b/Tables/Text/num-dot6.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/num-dot8.tti b/Tables/Text/num-dot8.tti index 74ebf6de..53c7c84b 100644 --- a/Tables/Text/num-dot8.tti +++ b/Tables/Text/num-dot8.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/num-french.tti b/Tables/Text/num-french.tti index ac4f0f81..0272d433 100644 --- a/Tables/Text/num-french.tti +++ b/Tables/Text/num-french.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/num-nemd8.tti b/Tables/Text/num-nemd8.tti index cc43799d..f5048ade 100644 --- a/Tables/Text/num-nemd8.tti +++ b/Tables/Text/num-nemd8.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/num-nemeth.tti b/Tables/Text/num-nemeth.tti index b17ba85e..a3741dba 100644 --- a/Tables/Text/num-nemeth.tti +++ b/Tables/Text/num-nemeth.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/nwc.ttb b/Tables/Text/nwc.ttb index 554d4e2c..1b9b35b6 100644 --- a/Tables/Text/nwc.ttb +++ b/Tables/Text/nwc.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/or.ttb b/Tables/Text/or.ttb index fe5bd8f9..dd0e8920 100644 --- a/Tables/Text/or.ttb +++ b/Tables/Text/or.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/oriya.tti b/Tables/Text/oriya.tti index eed3073a..c738f5e0 100644 --- a/Tables/Text/oriya.tti +++ b/Tables/Text/oriya.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/pa.ttb b/Tables/Text/pa.ttb index ea79a3da..faf7e1aa 100644 --- a/Tables/Text/pa.ttb +++ b/Tables/Text/pa.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/pi.ttb b/Tables/Text/pi.ttb index fd65894f..36073768 100644 --- a/Tables/Text/pi.ttb +++ b/Tables/Text/pi.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/pl.ttb b/Tables/Text/pl.ttb index 816105bb..d91d9bac 100644 --- a/Tables/Text/pl.ttb +++ b/Tables/Text/pl.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/pt.ttb b/Tables/Text/pt.ttb index faf82d4f..9234771e 100644 --- a/Tables/Text/pt.ttb +++ b/Tables/Text/pt.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/punc-alternate.tti b/Tables/Text/punc-alternate.tti index 6cb103a5..6eb85035 100644 --- a/Tables/Text/punc-alternate.tti +++ b/Tables/Text/punc-alternate.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/punc-basic.tti b/Tables/Text/punc-basic.tti index 8c6f6895..9a498f98 100644 --- a/Tables/Text/punc-basic.tti +++ b/Tables/Text/punc-basic.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/punc-tibetan.tti b/Tables/Text/punc-tibetan.tti index 47c4a978..2ff8c510 100644 --- a/Tables/Text/punc-tibetan.tti +++ b/Tables/Text/punc-tibetan.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ro.ttb b/Tables/Text/ro.ttb index 327a58d1..c7bed524 100644 --- a/Tables/Text/ro.ttb +++ b/Tables/Text/ro.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ru.ttb b/Tables/Text/ru.ttb index c2c4cb9f..b2be2fc3 100644 --- a/Tables/Text/ru.ttb +++ b/Tables/Text/ru.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sa.ttb b/Tables/Text/sa.ttb index 331ec304..c6b9cbb0 100644 --- a/Tables/Text/sa.ttb +++ b/Tables/Text/sa.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sat.ttb b/Tables/Text/sat.ttb index 932b0fae..9f28186a 100644 --- a/Tables/Text/sat.ttb +++ b/Tables/Text/sat.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sd.ttb b/Tables/Text/sd.ttb index f04bb94e..9ec1f4fc 100644 --- a/Tables/Text/sd.ttb +++ b/Tables/Text/sd.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sk.ttb b/Tables/Text/sk.ttb index a00c7e79..93746406 100644 --- a/Tables/Text/sk.ttb +++ b/Tables/Text/sk.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sl.ttb b/Tables/Text/sl.ttb index 4f6c316e..961a5c05 100644 --- a/Tables/Text/sl.ttb +++ b/Tables/Text/sl.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/spaces.tti b/Tables/Text/spaces.tti index d3d8b85b..42b86704 100644 --- a/Tables/Text/spaces.tti +++ b/Tables/Text/spaces.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sv-1989.ttb b/Tables/Text/sv-1989.ttb index 3c771876..01f26f11 100644 --- a/Tables/Text/sv-1989.ttb +++ b/Tables/Text/sv-1989.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sv-1996.ttb b/Tables/Text/sv-1996.ttb index 2a3ffb45..c3fa2008 100644 --- a/Tables/Text/sv-1996.ttb +++ b/Tables/Text/sv-1996.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sv.ttb b/Tables/Text/sv.ttb index 8edd9219..9517a2b1 100644 --- a/Tables/Text/sv.ttb +++ b/Tables/Text/sv.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/sw.ttb b/Tables/Text/sw.ttb index 4b35e76f..d724cd94 100644 --- a/Tables/Text/sw.ttb +++ b/Tables/Text/sw.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/ta.ttb b/Tables/Text/ta.ttb index cb00a023..634b6b12 100644 --- a/Tables/Text/ta.ttb +++ b/Tables/Text/ta.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/tamil.tti b/Tables/Text/tamil.tti index 31a93684..a2bcc895 100644 --- a/Tables/Text/tamil.tti +++ b/Tables/Text/tamil.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/te.ttb b/Tables/Text/te.ttb index 7329f63a..2c642be8 100644 --- a/Tables/Text/te.ttb +++ b/Tables/Text/te.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/telugu.tti b/Tables/Text/telugu.tti index 7211baf1..34fb5fa8 100644 --- a/Tables/Text/telugu.tti +++ b/Tables/Text/telugu.tti @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 2008-2017 by The BRLTTY Developers. +# Copyright (C) 2008-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/tr.ttb b/Tables/Text/tr.ttb index dbefe027..c8174e56 100644 --- a/Tables/Text/tr.ttb +++ b/Tables/Text/tr.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Tables/Text/uk.ttb b/Tables/Text/uk.ttb new file mode 100644 index 00000000..80bece08 --- /dev/null +++ b/Tables/Text/uk.ttb @@ -0,0 +1,67 @@ +############################################################################### +# BRLTTY - A background process providing access to the console screen (when in +# text mode) for a blind person using a refreshable braille display. +# +# Copyright (C) 1995-2018 by The BRLTTY Developers. +# +# BRLTTY comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +# BRLTTY Text Table - Ukrainian +# modeled from Russian Braille table by Victor Tsaran + +# This is the Ukrainian braille table. It is based on the KOI8-U character set +# which is the most used in Ukraine. + +# As the Ukrainian cyrillic definition conflicts with the latin definition, some +# decisions had to be taken. Users of this table need to type both latin for the command +# prompt and cyrillic while reading and writing documents and mail. + +# In the following, latin letters are quoted with apostrophes like in 'a', and +# cyrillic letters are enclosed within brackets like in [a]. + +# Dot 1 in the cyrillic definition is the cyrillic letter which looks and +# sounds like 'a'. The problem is that in the KOI8-U character set, there is +# both a latin 'a' and a cyrillic [a]. In decimal, their character numbers are +# 97 and 193 respectively. To handle conflicts like these, we have prioritized +# which characters are most important to match the standard. + +# RULES: +# 1. All cyrillic characters must follow the Ukrainian standard. KOI8-U character +# 193 [a] must be dot-1, and so on. +# 2. Capital cyrillic letters have dot 7 on. +# 3. The latin alphabet is implemented to follow the international standard +# except it has dot 8 on. +# 4. Capital latin letters have dots 7 and 8 on. +# 5. Numbers are defined as in the American standard. This means dot-2 for +# number '1', and so on. This will conflict with the cyrillic comma which is +# also dot-2. +# 4. Special characters like !"#¤%&/()=? follow the American standard if +# possible. +# 2. Control characters are often used on Linux. These are not very well +# implemented. More work should be done. + +# Comments from Ukrainians are very welcome. + +include ltr-cyrillic.tti +include ltr-dot8.tti +include num-nemeth.tti +include punc-alternate.tti + +# generated by ttbtest: charset=koi8-u +char \u2219 ( 23 8) # 95 ⢆ ∙ [BULLET OPERATOR] +char \xB0 ( 23 567 ) # 9C ⡶ ° [DEGREE SIGN] +char \xB2 ( 2 6 8) # 9D ⢢ ² [SUPERSCRIPT TWO] +char \xB7 ( 345 78) # 9E ⣜ · [MIDDLE DOT] +char \xA9 ( 34 678) # BF ⣬ © [COPYRIGHT SIGN] + +include common.tti diff --git a/Tables/Text/vi.ttb b/Tables/Text/vi.ttb index 8c57c0be..ce547432 100644 --- a/Tables/Text/vi.ttb +++ b/Tables/Text/vi.ttb @@ -2,7 +2,7 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # diff --git a/Windows/libusb-1.0.nsi b/Windows/libusb-1.0.nsi index 409e9e42..e85cfda2 100644 --- a/Windows/libusb-1.0.nsi +++ b/Windows/libusb-1.0.nsi @@ -61,7 +61,7 @@ ;Pages !insertmacro MUI_PAGE_WELCOME - !insertmacro MUI_PAGE_LICENSE "${DISTDIR}\LICENSE-GPL.txt" + !insertmacro MUI_PAGE_LICENSE "${DISTDIR}\LICENSE-LGPL.txt" !insertmacro MUI_PAGE_DIRECTORY ;-------------------------------- diff --git a/Windows/libusb.nsi b/Windows/libusb.nsi index 6a417214..96105668 100644 --- a/Windows/libusb.nsi +++ b/Windows/libusb.nsi @@ -61,7 +61,7 @@ ;Pages !insertmacro MUI_PAGE_WELCOME - !insertmacro MUI_PAGE_LICENSE "${DISTDIR}\LICENSE-GPL.txt" + !insertmacro MUI_PAGE_LICENSE "${DISTDIR}\LICENSE-LGPL.txt" !insertmacro MUI_PAGE_DIRECTORY ;-------------------------------- diff --git a/Windows/mingw.sh b/Windows/mingw.sh index eedb4a07..f08cc467 100644 --- a/Windows/mingw.sh +++ b/Windows/mingw.sh @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/Windows/mkwin b/Windows/mkwin index e7ea3b96..e77504f4 100755 --- a/Windows/mkwin +++ b/Windows/mkwin @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/absdeps.mk b/absdeps.mk index 78a15385..9ccb9cdb 100644 --- a/absdeps.mk +++ b/absdeps.mk @@ -500,6 +500,7 @@ $(BLD_TOP)Drivers/Braille/EuroBraille/eu_esysiris.$O: $(SRC_TOP)Headers/ktb_type $(BLD_TOP)Drivers/Braille/EuroBraille/eu_esysiris.$O: $(SRC_TOP)Headers/queue.h $(BLD_TOP)Drivers/Braille/EuroBraille/eu_esysiris.$O: $(SRC_TOP)Headers/serial_types.h $(BLD_TOP)Drivers/Braille/EuroBraille/eu_esysiris.$O: $(SRC_TOP)Headers/usb_types.h +$(BLD_TOP)Drivers/Braille/EuroBraille/eu_esysiris.$O: $(SRC_TOP)Drivers/Braille/EuroBraille/eu_protocoldef.h cd $(@D) && $(MAKE) $(@F) # Dependencies for Drivers/Braille/EuroBraille/eutp_brl.$O: @@ -711,6 +712,33 @@ $(BLD_TOP)Drivers/Braille/HumanWare/braille.$O: $(SRC_TOP)Headers/usb_types.h $(BLD_TOP)Drivers/Braille/HumanWare/braille.$O: $(SRC_TOP)Drivers/Braille/HumanWare/brldefs-hw.h cd $(@D) && $(MAKE) $(@F) +# Dependencies for Drivers/Braille/Inceptor/braille.$O: +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Drivers/Braille/Inceptor/braille.c +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/prologue.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(BLD_TOP)config.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(BLD_TOP)forbuild.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/log.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/api_types.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/async.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/async_io.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/brl_base.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/brl_cmds.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/brl_dots.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/brl_driver.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/brl_types.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/brl_utils.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/cmd_enqueue.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/driver.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/gio_types.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/io_generic.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/ktb_types.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/queue.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/serial_types.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/status_types.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Headers/usb_types.h +$(BLD_TOP)Drivers/Braille/Inceptor/braille.$O: $(SRC_TOP)Drivers/Braille/Inceptor/brldefs-ic.h + cd $(@D) && $(MAKE) $(@F) + # Dependencies for Drivers/Braille/Iris/braille.$O: $(BLD_TOP)Drivers/Braille/Iris/braille.$O: $(SRC_TOP)Drivers/Braille/Iris/braille.c $(BLD_TOP)Drivers/Braille/Iris/braille.$O: $(SRC_TOP)Headers/prologue.h @@ -1215,7 +1243,6 @@ $(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/system_windows.h $(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/log.h $(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/get_sockets.h $(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/io_misc.h -$(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/device.h $(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/parse.h $(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/async.h $(BLD_TOP)Drivers/Braille/Virtual/braille.$O: $(SRC_TOP)Headers/async_wait.h @@ -3599,6 +3626,7 @@ $(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/prologue.h $(BLD_TOP)Programs/ctb_compile.$O: $(BLD_TOP)config.h $(BLD_TOP)Programs/ctb_compile.$O: $(BLD_TOP)forbuild.h $(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/log.h +$(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/parse.h $(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/file.h $(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/get_sockets.h $(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/ctb.h @@ -3611,25 +3639,66 @@ $(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/brl_dots.h $(BLD_TOP)Programs/ctb_compile.$O: $(SRC_TOP)Headers/hostcmd.h cd $(@D) && $(MAKE) $(@F) +# Dependencies for Programs/ctb_external.$O: +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Programs/ctb_external.c +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/prologue.h +$(BLD_TOP)Programs/ctb_external.$O: $(BLD_TOP)config.h +$(BLD_TOP)Programs/ctb_external.$O: $(BLD_TOP)forbuild.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/log.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/ctb.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/ctb_types.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/prefs.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Programs/ctb_internal.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Programs/ctb_translate.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/brl_dots.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/file.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/get_sockets.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/parse.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/charset.h +$(BLD_TOP)Programs/ctb_external.$O: $(SRC_TOP)Headers/lock.h + cd $(@D) && $(MAKE) $(@F) + +# Dependencies for Programs/ctb_louis.$O: +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Programs/ctb_louis.c +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Headers/prologue.h +$(BLD_TOP)Programs/ctb_louis.$O: $(BLD_TOP)config.h +$(BLD_TOP)Programs/ctb_louis.$O: $(BLD_TOP)forbuild.h +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Headers/log.h +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Headers/ctb.h +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Headers/ctb_types.h +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Headers/prefs.h +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Programs/ctb_internal.h +$(BLD_TOP)Programs/ctb_louis.$O: $(SRC_TOP)Programs/ctb_translate.h + cd $(@D) && $(MAKE) $(@F) + +# Dependencies for Programs/ctb_native.$O: +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Programs/ctb_native.c +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/prologue.h +$(BLD_TOP)Programs/ctb_native.$O: $(BLD_TOP)config.h +$(BLD_TOP)Programs/ctb_native.$O: $(BLD_TOP)forbuild.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/log.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/ctb.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/ctb_types.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/prefs.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Programs/ctb_internal.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Programs/ctb_translate.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/brl_dots.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/unicode.h +$(BLD_TOP)Programs/ctb_native.$O: $(SRC_TOP)Headers/ascii.h + cd $(@D) && $(MAKE) $(@F) + # Dependencies for Programs/ctb_translate.$O: $(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Programs/ctb_translate.c $(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/prologue.h $(BLD_TOP)Programs/ctb_translate.$O: $(BLD_TOP)config.h $(BLD_TOP)Programs/ctb_translate.$O: $(BLD_TOP)forbuild.h +$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/log.h $(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/ctb.h $(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/ctb_types.h +$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/prefs.h $(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Programs/ctb_internal.h +$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Programs/ctb_translate.h $(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/ttb.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/prefs.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/unicode.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/charset.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/lock.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/ascii.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/brl_dots.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/log.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/file.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/get_sockets.h -$(BLD_TOP)Programs/ctb_translate.$O: $(SRC_TOP)Headers/parse.h cd $(@D) && $(MAKE) $(@F) # Dependencies for Programs/dataarea.$O: @@ -3848,7 +3917,7 @@ $(BLD_TOP)Programs/gio_null.$O: $(SRC_TOP)Headers/io_generic.h $(BLD_TOP)Programs/gio_null.$O: $(SRC_TOP)Headers/serial_types.h $(BLD_TOP)Programs/gio_null.$O: $(SRC_TOP)Headers/usb_types.h $(BLD_TOP)Programs/gio_null.$O: $(SRC_TOP)Programs/gio_internal.h -$(BLD_TOP)Programs/gio_null.$O: $(SRC_TOP)Headers/device.h +$(BLD_TOP)Programs/gio_null.$O: $(SRC_TOP)Headers/parse.h cd $(@D) && $(MAKE) $(@F) # Dependencies for Programs/gio_serial.$O: @@ -4388,7 +4457,6 @@ $(BLD_TOP)Programs/midi_alsa.$O: $(BLD_TOP)forbuild.h $(BLD_TOP)Programs/midi_alsa.$O: $(SRC_TOP)Headers/log.h $(BLD_TOP)Programs/midi_alsa.$O: $(SRC_TOP)Headers/parse.h $(BLD_TOP)Programs/midi_alsa.$O: $(SRC_TOP)Headers/timing.h -$(BLD_TOP)Programs/midi_alsa.$O: $(SRC_TOP)Headers/dynld.h $(BLD_TOP)Programs/midi_alsa.$O: $(SRC_TOP)Headers/midi.h cd $(@D) && $(MAKE) $(@F) @@ -4618,7 +4686,6 @@ $(BLD_TOP)Programs/pcm_alsa.$O: $(BLD_TOP)config.h $(BLD_TOP)Programs/pcm_alsa.$O: $(BLD_TOP)forbuild.h $(BLD_TOP)Programs/pcm_alsa.$O: $(SRC_TOP)Headers/log.h $(BLD_TOP)Programs/pcm_alsa.$O: $(SRC_TOP)Headers/timing.h -$(BLD_TOP)Programs/pcm_alsa.$O: $(SRC_TOP)Headers/dynld.h $(BLD_TOP)Programs/pcm_alsa.$O: $(SRC_TOP)Headers/pcm.h cd $(@D) && $(MAKE) $(@F) @@ -5878,6 +5945,7 @@ $(BLD_TOP)Programs/update.$O: $(BLD_TOP)config.h $(BLD_TOP)Programs/update.$O: $(BLD_TOP)forbuild.h $(BLD_TOP)Programs/update.$O: $(SRC_TOP)Programs/parameters.h $(BLD_TOP)Programs/update.$O: $(SRC_TOP)Headers/log.h +$(BLD_TOP)Programs/update.$O: $(SRC_TOP)Headers/alert.h $(BLD_TOP)Programs/update.$O: $(SRC_TOP)Headers/report.h $(BLD_TOP)Programs/update.$O: $(SRC_TOP)Headers/strfmt.h $(BLD_TOP)Programs/update.$O: $(SRC_TOP)Headers/strfmth.h diff --git a/acdir/install-sh b/acdir/install-sh index 584e31a7..0128876c 100755 --- a/acdir/install-sh +++ b/acdir/install-sh @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/aclocal.m4 b/aclocal.m4 index a736f539..604bd6f4 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,3 +1,20 @@ +############################################################################### +# libbrlapi - A library providing access to braille terminals for applications. +# +# Copyright (C) 1995-2018 by Dave Mielke +# +# libbrlapi comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + AC_DEFUN([BRLTTY_UPPERCASE_TRANSLATE], [translit([$1], [a-z], [A-Z])]) AC_DEFUN([BRLTTY_TRANSLATE_ASSIGN], [$1=`echo "$2" | sed -e 'y%$3%$4%'`]) @@ -96,8 +113,8 @@ AC_SUBST([$1_table])]) AC_DEFUN([BRLTTY_ARG_PARAMETERS], [dnl BRLTTY_ARG_WITH( - [$1-parameters], [DRIVER:PARAMETER=SETTING... (comma-separated)], - [default parameters for the $1 driver(s)], + [$1-parameters], [$3PARAMETER=SETTING... (comma-separated)], + [default parameters for the $2], [$1_parameters], [""] ) if test "${$1_parameters}" = "no" @@ -108,7 +125,7 @@ then $1_parameters="" fi AC_DEFINE_UNQUOTED(BRLTTY_UPPERCASE_TRANSLATE([$1_parameters]), ["${$1_parameters}"], - [Define this to be a string containing the default $2 parameters.]) + [Define this to be a string containing the default parameters for the $2.]) BRLTTY_SUMMARY_ITEM([$1-parameters], [$1_parameters])]) AC_DEFUN([BRLTTY_ARG_PACKAGE], [dnl @@ -456,7 +473,7 @@ then fi BRLTTY_SUMMARY_ITEM([internal-$1-drivers], [brltty_internal_codes_$1]) - BRLTTY_ARG_PARAMETERS([$1], [$1 driver]) + BRLTTY_ARG_PARAMETERS([$1], [$1 driver(s)], [DRIVER:]) fi for brltty_driver in ${brltty_item_names_$1} diff --git a/apitest.sh b/apitest.sh new file mode 100644 index 00000000..32a64f0b --- /dev/null +++ b/apitest.sh @@ -0,0 +1,25 @@ +############################################################################### +# libbrlapi - A library providing access to braille terminals for applications. +# +# Copyright (C) 2006-2018 by Dave Mielke +# +# libbrlapi comes with ABSOLUTELY NO WARRANTY. +# +# This is free software, placed under the terms of the +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. +# +# Web Page: http://brltty.com/ +# +# This software is maintained by Dave Mielke . +############################################################################### + +programName="$(basename "${0}")" +cd "$(dirname "${0}")" +programDirectory="$(pwd)" + +[ -z "${LD_LIBRARY_PATH}" ] || LD_LIBRARY_PATH=":${LD_LIBRARY_PATH}" +export LD_LIBRARY_PATH="${programDirectory}${LD_LIBRARY_PATH}" +export LD_PRELOAD="${programDirectory}/../../Programs/libbrlapi.so" + diff --git a/autogen b/autogen index 5e1fece6..bb0bfceb 100755 --- a/autogen +++ b/autogen @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/bindings.mk b/bindings.mk index 33e36bbb..abe35982 100644 --- a/bindings.mk +++ b/bindings.mk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/braille.mk b/braille.mk index 12d5ef12..6c5b836d 100644 --- a/braille.mk +++ b/braille.mk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -27,12 +27,12 @@ BRL_MOD_NAME = $(BLD_TOP)$(DRV_DIR)/$(MOD_NAME)b$(DRIVER_CODE) BRL_MOD_FILE = $(BRL_MOD_NAME).$(MOD_EXT) $(BRL_MOD_FILE): braille.$O $(INSTALL_DIRECTORY) $(@D) - $(MKMOD) $(@) braille.$O $(BRL_OBJS) + $(MKSHR) $(@) braille.$O $(BRL_OBJS) braille-driver: $(BRL_MOD_FILE) install-api:: $(INSTALL_DIRECTORY) $(INSTALL_ROOT)$(INCLUDE_DIRECTORY) - for file in *-$(DRIVER_CODE).h; do test -f $$file && $(INSTALL_DATA) $$file $(INSTALL_ROOT)$(INCLUDE_DIRECTORY); done || : + for file in $(SRC_DIR)/*-$(DRIVER_CODE).h; do test -f $$file && $(INSTALL_DATA) $$file $(INSTALL_ROOT)$(INCLUDE_DIRECTORY); done || : install:: $(INSTALL_API) diff --git a/brltty.spec b/brltty.spec index 575f1ef7..2c27d4b1 100644 --- a/brltty.spec +++ b/brltty.spec @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -18,7 +18,7 @@ ############################################################################### Name: brltty -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -51,6 +51,7 @@ BuildRequires: /usr/bin/awk BuildRequires: tcl BuildRequires: glibc-devel BuildRequires: libicu-devel +BuildRequires: liblouis-devel BuildRequires: ncurses-devel BuildRequires: alsa-lib-devel BuildRequires: bluez-libs-devel @@ -77,7 +78,7 @@ Install this package if you use a refreshable braille display. %package -n brltty-braille-brlapi -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -95,11 +96,13 @@ of the braille device. %package -n brltty-braille-xwindow -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL +Requires: libX11 + BuildRequires: xorg-x11-proto-devel BuildRequires: libX11-devel BuildRequires: libXt-devel @@ -121,7 +124,7 @@ application would be by a blind person using a braille device. %package -n brltty-speech-espeak -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -132,7 +135,6 @@ BuildRequires: espeak-devel AutoProv: no AutoReq: yes -Requires: espeak Summary: eSpeak speech driver for BRLTTY. %description -n brltty-speech-espeak @@ -143,7 +145,7 @@ eSpeak text-to-speech engine. %package -n brltty-speech-festival -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -152,7 +154,6 @@ Requires: festival AutoProv: no AutoReq: yes -Requires: festival Summary: Festival speech driver for BRLTTY. %description -n brltty-speech-festival @@ -163,7 +164,7 @@ Festival text-to-speech engine. %package -n brltty-speech-flite -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -174,7 +175,6 @@ BuildRequires: flite-devel AutoProv: no AutoReq: yes -Requires: flite Summary: Festival Lite speech driver for BRLTTY. %description -n brltty-speech-flite @@ -185,7 +185,7 @@ Festival Lite text-to-speech engine. %package -n brltty-speech-speechd -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -196,7 +196,6 @@ BuildRequires: speech-dispatcher-devel AutoProv: no AutoReq: yes -Requires: speech-dispatcher Summary: Speech Dispatcher speech driver for BRLTTY. %description -n brltty-speech-speechd @@ -207,18 +206,20 @@ Speech Dispatcher text-to-speech server. %package -n brltty-screen-atspi -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL Requires: at-spi +Requires: libX11 BuildRequires: at-spi-devel +BuildRequires: libX11-devel +BuildRequires: xorg-x11-proto-devel AutoProv: no AutoReq: yes -Requires: at-spi Summary: AT-SPI screen driver for BRLTTY. %description -n brltty-screen-atspi @@ -230,7 +231,7 @@ Technology Service Provider Interface. %package -n brltty-screen-atspi2 -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -238,10 +239,11 @@ License: GPL Requires: dbus BuildRequires: at-spi2-core-devel +BuildRequires: xorg-x11-proto-devel +BuildRequires: dbus-devel AutoProv: no AutoReq: yes -Requires: dbus Summary: AT-SPI2 screen driver for BRLTTY. %description -n brltty-screen-atspi2 @@ -253,7 +255,7 @@ the Assistive Technology Service Provider Interface. %package -n brltty-screen-screen -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -272,7 +274,7 @@ screen program. %package -n brltty-utils -Version: 5.5 +Version: 5.6 Release: 1 Group: Development/Tools License: GPL @@ -288,7 +290,7 @@ This package provides a set of commands for maintaining BRLTTY's datafiles. %package -n brltty-devel -Version: 5.5 +Version: 5.6 Release: 1 Group: Development/Tools License: GPL @@ -308,7 +310,7 @@ interpret key codes as delivered by BrlAPI's raw mode. %package -n brltty-systemd -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -325,7 +327,7 @@ Install this package if you'd like to manage BRLTTY processes via Systemd. %package -n brltty-udev -Version: 5.5 +Version: 5.6 Release: 1 Group: System Environment/Daemons License: GPL @@ -342,7 +344,7 @@ Install this package if you'd like to manage BRLTTY processes via Udev. %package -n brlapi -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: System Environment/Libraries License: LGPL @@ -360,7 +362,7 @@ which directly accesses a refreshable braille display. %package -n brlapi-devel -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: Development/Libraries License: LGPL @@ -383,7 +385,7 @@ which directly accesses a refreshable braille display. %package -n java-brlapi -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: System Environment/Libraries License: LGPL @@ -403,7 +405,7 @@ which directly accesses a refreshable braille display. %package -n ocaml-brlapi -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: System Environment/Libraries License: LGPL @@ -424,7 +426,7 @@ which directly accesses a refreshable braille display. %package -n python-brlapi -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: System Environment/Libraries License: LGPL @@ -446,7 +448,7 @@ which directly accesses a refreshable braille display. %package -n tcl-brlapi -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: System Environment/Libraries License: LGPL @@ -467,11 +469,13 @@ which directly accesses a refreshable braille display. %package -n brlapi-utils -Version: 0.6.6 +Version: 0.6.7 Release: 1 Group: Applications/System License: LGPL +Requires: libX11 + BuildRequires: xorg-x11-proto-devel BuildRequires: libX11-devel BuildRequires: libXtst-devel @@ -486,7 +490,7 @@ This package provides a set of commands for maintaining BRLTTY's datafiles. %prep # %setup -n %{name}-%{version} -%setup -n brltty-5.5 +%setup -n brltty-5.6 %build %configure --disable-relocatable-install --with-install-root="${RPM_BUILD_ROOT}" --disable-gpm --without-mikropuhe --without-swift --without-theta --without-viavoice --without-libbraille --with-braille-driver=-tt,-vr @@ -494,7 +498,7 @@ make %install make install install-documents install-messages -make install-systemd install-udev +make install-systemd install-udev install-appstream install -m 644 Documents/brltty.conf "${RPM_BUILD_ROOT}%{_sysconfdir}" %find_lang %{name} @@ -586,8 +590,8 @@ rm -fr "${RPM_BUILD_ROOT}" /usr/lib64/python2.7/site-packages/[bB]rlapi[-.]* %files -n tcl-brlapi -/usr/lib64/tcl8.5/brlapi-0.6.6/libbrlapi_tcl.so -/usr/lib64/tcl8.5/brlapi-0.6.6/pkgIndex.tcl +/usr/lib64/tcl8.5/brlapi-0.6.7/libbrlapi_tcl.so +/usr/lib64/tcl8.5/brlapi-0.6.7/pkgIndex.tcl %files -n brlapi-devel %defattr(-,root,root) @@ -610,72 +614,51 @@ rm -fr "${RPM_BUILD_ROOT}" %changelog -* Tue Apr 18 2017 Dave Mielke 5.5 -General changes: - The braille and speech banners no longer include the revision identifier. - The -o (--override-preference=) option has been added. - quiet-if-no-braille can be specified via the configuration file. - Cursor routing hangs have been resolved. - The Log Messages submenu (for warnings and errors) has been added. - Support for panning within a long alert message has been added. - Alert beeps work on a Linux serial console. - The Greek text table has been improved. -Braille device changes: - The default is to check both USB and Bluetooth (not just USB). - Specifying the Bluetooth address is no longer mandatory. - A prefix of a Bluetooth device's name can be specified. - A generic USB serial adapter is probed only if it's been customized. -Baum braille driver changes: - Support for the Vario Ultra has been improved. - Support for the Orbit 20 has been added. -EuroBraille braille driver changes: - More Esytime bindings have been added. - Support has been added for the EsysLight 80 and the Esytime Evolution. -HandyTech braille driver changes: - Support has been added for the Actilino. - The rocker keys can be used for efficient navigation of the menu. - B4+B5 has been bound to Command Learn Mode. - The (now redundant) keypad binding for Command Learn Mode has been removed. - The Bluetooth names of the Active Star and the Braillino are recognized. -HIMS braille driver changes: - Function key bindings have been added for models with four scroll keys. -TTY braille driver changes: - The braille cells are shown (in addition to the text). -HumanWare braille driver changes: - The Braille Note is autodetected when using USB. - Support has been added for the Braille Note Touch. -Polkit changes: - The policy file is installed. - The policy has been renamed to org.a11y.brlapi (from org.brltty). - Initialization doesn't delay BRLTTY startup. -Systemd changes: - The default instance is now brltty.target (not brltty.service). - Multiple instances can be managed (via brltty@.target instances). - A make file has been added to simplify unit and wrapper installation. - BRLTTY isn't started until Udev has finished initializing. - BRLTTY isn't automatically restarted if it terminates cleanly. -Udev changes: - A make file has been added to simplify rules and wrapper installation. +* Mon Feb 5 2018 Dave Mielke 5.6 +General updates: + BRLTTY has been relicensed to the LGPL (from the GPL). + Better cursor routing handling of status line updates and vertical scrolling. + The Track Screen Scroll setting has been added. + The Word Wrap setting has been added. + Panning left when using a contraction table now word wraps. + Typing dismisses an alert message. + The test for when INFO does text maximization instead has been fixed. + Overrides are now applied when the preferences haven't yet been saved. + The Inceptor braille driver (from Innovision) has been added. +The Baum braille driver: + On models with B9 and B10 by the joystick, both are interpreted as Space. + Input packet handling for Pronto! V3 models has been fixed. +The EuroBraille braille driver: + Improved autodetection when using Bluetooth. + The Esytime braille keyboard can be used over Bluetooth and USB. + For Esytime models, B5 has been renamed to B8. +The HIMS braille driver: + The Smart Beetle is now recognized when using Bluetooth. +The HumanWare braille driver: + The BrailleNote Touch is recognized when using USB. BrlAPI changes: - The version is now 0.6.6 (it was 0.6.5). - The server isn't started until the braille driver has started. - Several small fixes. -xbrlapi changes: - The X11 and gdm autostart files are installed. - Constantly trying to connect when BRLTTY isn't available has been fixed. - Reconnection on every window change has been fixed. -Key table changes: - Common chords for all of the sticky modifier keys have been added. - Listings combine dot keys, e.g. Dots12 instead of Dot1+Dot2. + The version is now 0.6.7 (it was 0.6.6). + The brlapi_getModelIdentifier() function has been added to the API. + The default character set is now based on the user's locale. + Sessions would occasionally hang when connecting. + PolKit authentication is no longer attempted when it isn't available. + Reading raw key codes no longer uses key ranges. +Text tables: + The lt (Lithuanian) table has been updated. + The uk (Ukrainian) table has been added. +Contraction tables: + The fr-abrege (French) table has been updated. + The lt (Lithuanian) table has been added. + Support has been added for LibLouis tables. + brltty-ctb's output is now UTF-8 (rather than ASCII). +Key tables: + The ifPlatform and ifNotPlatform directives have been added. +Systemd changes: + Path (rather than target) units are now used to manage BRLTTY instances. Android changes: - The cursor no longer jumps back to the start while spaces are being typed. - Customization files can be in internal storage and/or on the SD card. -Windows changes: - Interaction with NVDA has been revived. - LibUSB can be used on a 64-bit system. - Builds can be done on MinGW64. -Build changes: - AppStream metainfo is maintained and installed. - The new Speech Dispatcher installation layout is supported. - Fixes to support building on Solaris 10 and 11 with C99. + Danish translations have been added. +Build features: + Add the reload target to the make files for Systemd and Udev. + A make file for install/uninstall of the AppStream rules has been added. + Python 3.6 is supported. diff --git a/brltty.spec.in b/brltty.spec.in index 1950ad40..8a4986c5 100644 --- a/brltty.spec.in +++ b/brltty.spec.in @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -51,6 +51,7 @@ BuildRequires: /usr/bin/awk BuildRequires: tcl BuildRequires: glibc-devel BuildRequires: libicu-devel +BuildRequires: liblouis-devel BuildRequires: ncurses-devel BuildRequires: alsa-lib-devel BuildRequires: bluez-libs-devel @@ -100,6 +101,8 @@ Release: 1 Group: System Environment/Daemons License: GPL +Requires: libX11 + BuildRequires: xorg-x11-proto-devel BuildRequires: libX11-devel BuildRequires: libXt-devel @@ -132,7 +135,6 @@ BuildRequires: espeak-devel AutoProv: no AutoReq: yes -Requires: espeak Summary: eSpeak speech driver for BRLTTY. %description -n brltty-speech-espeak @@ -152,7 +154,6 @@ Requires: festival AutoProv: no AutoReq: yes -Requires: festival Summary: Festival speech driver for BRLTTY. %description -n brltty-speech-festival @@ -174,7 +175,6 @@ BuildRequires: flite-devel AutoProv: no AutoReq: yes -Requires: flite Summary: Festival Lite speech driver for BRLTTY. %description -n brltty-speech-flite @@ -196,7 +196,6 @@ BuildRequires: speech-dispatcher-devel AutoProv: no AutoReq: yes -Requires: speech-dispatcher Summary: Speech Dispatcher speech driver for BRLTTY. %description -n brltty-speech-speechd @@ -213,12 +212,14 @@ Group: System Environment/Daemons License: GPL Requires: at-spi +Requires: libX11 BuildRequires: at-spi-devel +BuildRequires: libX11-devel +BuildRequires: xorg-x11-proto-devel AutoProv: no AutoReq: yes -Requires: at-spi Summary: AT-SPI screen driver for BRLTTY. %description -n brltty-screen-atspi @@ -238,10 +239,11 @@ License: GPL Requires: dbus BuildRequires: at-spi2-core-devel +BuildRequires: xorg-x11-proto-devel +BuildRequires: dbus-devel AutoProv: no AutoReq: yes -Requires: dbus Summary: AT-SPI2 screen driver for BRLTTY. %description -n brltty-screen-atspi2 @@ -472,6 +474,8 @@ Release: 1 Group: Applications/System License: LGPL +Requires: libX11 + BuildRequires: xorg-x11-proto-devel BuildRequires: libX11-devel BuildRequires: libXtst-devel @@ -494,7 +498,7 @@ make %install make install install-documents install-messages -make install-systemd install-udev +make install-systemd install-udev install-appstream install -m 644 Documents/brltty.conf "${RPM_BUILD_ROOT}%{_sysconfdir}" %find_lang %{name} @@ -610,72 +614,51 @@ rm -fr "${RPM_BUILD_ROOT}" %changelog -* Tue Apr 18 2017 Dave Mielke 5.5 -General changes: - The braille and speech banners no longer include the revision identifier. - The -o (--override-preference=) option has been added. - quiet-if-no-braille can be specified via the configuration file. - Cursor routing hangs have been resolved. - The Log Messages submenu (for warnings and errors) has been added. - Support for panning within a long alert message has been added. - Alert beeps work on a Linux serial console. - The Greek text table has been improved. -Braille device changes: - The default is to check both USB and Bluetooth (not just USB). - Specifying the Bluetooth address is no longer mandatory. - A prefix of a Bluetooth device's name can be specified. - A generic USB serial adapter is probed only if it's been customized. -Baum braille driver changes: - Support for the Vario Ultra has been improved. - Support for the Orbit 20 has been added. -EuroBraille braille driver changes: - More Esytime bindings have been added. - Support has been added for the EsysLight 80 and the Esytime Evolution. -HandyTech braille driver changes: - Support has been added for the Actilino. - The rocker keys can be used for efficient navigation of the menu. - B4+B5 has been bound to Command Learn Mode. - The (now redundant) keypad binding for Command Learn Mode has been removed. - The Bluetooth names of the Active Star and the Braillino are recognized. -HIMS braille driver changes: - Function key bindings have been added for models with four scroll keys. -TTY braille driver changes: - The braille cells are shown (in addition to the text). -HumanWare braille driver changes: - The Braille Note is autodetected when using USB. - Support has been added for the Braille Note Touch. -Polkit changes: - The policy file is installed. - The policy has been renamed to org.a11y.brlapi (from org.brltty). - Initialization doesn't delay BRLTTY startup. -Systemd changes: - The default instance is now brltty.target (not brltty.service). - Multiple instances can be managed (via brltty@.target instances). - A make file has been added to simplify unit and wrapper installation. - BRLTTY isn't started until Udev has finished initializing. - BRLTTY isn't automatically restarted if it terminates cleanly. -Udev changes: - A make file has been added to simplify rules and wrapper installation. +* Mon Feb 5 2018 Dave Mielke 5.6 +General updates: + BRLTTY has been relicensed to the LGPL (from the GPL). + Better cursor routing handling of status line updates and vertical scrolling. + The Track Screen Scroll setting has been added. + The Word Wrap setting has been added. + Panning left when using a contraction table now word wraps. + Typing dismisses an alert message. + The test for when INFO does text maximization instead has been fixed. + Overrides are now applied when the preferences haven't yet been saved. + The Inceptor braille driver (from Innovision) has been added. +The Baum braille driver: + On models with B9 and B10 by the joystick, both are interpreted as Space. + Input packet handling for Pronto! V3 models has been fixed. +The EuroBraille braille driver: + Improved autodetection when using Bluetooth. + The Esytime braille keyboard can be used over Bluetooth and USB. + For Esytime models, B5 has been renamed to B8. +The HIMS braille driver: + The Smart Beetle is now recognized when using Bluetooth. +The HumanWare braille driver: + The BrailleNote Touch is recognized when using USB. BrlAPI changes: - The version is now 0.6.6 (it was 0.6.5). - The server isn't started until the braille driver has started. - Several small fixes. -xbrlapi changes: - The X11 and gdm autostart files are installed. - Constantly trying to connect when BRLTTY isn't available has been fixed. - Reconnection on every window change has been fixed. -Key table changes: - Common chords for all of the sticky modifier keys have been added. - Listings combine dot keys, e.g. Dots12 instead of Dot1+Dot2. + The version is now 0.6.7 (it was 0.6.6). + The brlapi_getModelIdentifier() function has been added to the API. + The default character set is now based on the user's locale. + Sessions would occasionally hang when connecting. + PolKit authentication is no longer attempted when it isn't available. + Reading raw key codes no longer uses key ranges. +Text tables: + The lt (Lithuanian) table has been updated. + The uk (Ukrainian) table has been added. +Contraction tables: + The fr-abrege (French) table has been updated. + The lt (Lithuanian) table has been added. + Support has been added for LibLouis tables. + brltty-ctb's output is now UTF-8 (rather than ASCII). +Key tables: + The ifPlatform and ifNotPlatform directives have been added. +Systemd changes: + Path (rather than target) units are now used to manage BRLTTY instances. Android changes: - The cursor no longer jumps back to the start while spaces are being typed. - Customization files can be in internal storage and/or on the SD card. -Windows changes: - Interaction with NVDA has been revived. - LibUSB can be used on a 64-bit system. - Builds can be done on MinGW64. -Build changes: - AppStream metainfo is maintained and installed. - The new Speech Dispatcher installation layout is supported. - Fixes to support building on Solaris 10 and 11 with C99. + Danish translations have been added. +Build features: + Add the reload target to the make files for Systemd and Udev. + A make file for install/uninstall of the AppStream rules has been added. + Python 3.6 is supported. diff --git a/cfg-android b/cfg-android index f23c9e54..1c9ad3e1 100755 --- a/cfg-android +++ b/cfg-android @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -81,11 +81,12 @@ export LDFLAGS="-Wl,--fix-cortex-a8" "${sourceRoot}/configure" \ --disable-gpm \ --disable-icu \ + --disable-liblouis \ --disable-polkit \ --disable-x \ \ --without-libbraille \ - --with-braille-driver=-ba,-bg,-tt,-vr,al,at,bm,ce,eu,fs,hm,ht,hw,ir,mm,md,mt,np,pg,pm,sk,vo \ + --with-braille-driver=-ba,-bg,-tt,-vr,al,at,bm,bn,ce,eu,fs,hm,ht,hw,ic,ir,md,mm,mt,np,pg,pm,sk,vo \ \ --without-espeak \ --without-flite \ diff --git a/cfg-darwin b/cfg-darwin index a473531c..13741c37 100755 --- a/cfg-darwin +++ b/cfg-darwin @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/cfg-dos b/cfg-dos index 6c9a9ab7..82277980 100755 --- a/cfg-dos +++ b/cfg-dos @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -49,6 +49,7 @@ export LDFLAGS="" --disable-api \ --disable-gpm \ --disable-icu \ + --disable-liblouis \ --disable-polkit \ --disable-x \ \ diff --git a/cfg-grub b/cfg-grub index 729f8d89..7263e2b7 100755 --- a/cfg-grub +++ b/cfg-grub @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/cfg-iris b/cfg-iris index 3405e940..b108c6c3 100755 --- a/cfg-iris +++ b/cfg-iris @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/chkhdrs b/chkhdrs index 3440d06e..1a39ef17 100755 --- a/chkhdrs +++ b/chkhdrs @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/common.mk b/common.mk index c43a05b6..74c40860 100644 --- a/common.mk +++ b/common.mk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -111,10 +111,6 @@ INSTALL_INCLUDE_DIRECTORY = $(INSTALL_ROOT)$(INCLUDE_DIRECTORY) install-include-directory: $(INSTALL_DIRECTORY) $(INSTALL_INCLUDE_DIRECTORY) -INSTALL_METAINFO_DIRECTORY = $(INSTALL_ROOT)$(datadir)/metainfo -install-metainfo-directory: - $(INSTALL_DIRECTORY) $(INSTALL_METAINFO_DIRECTORY) - INSTALL_APILIB_DIRECTORY = $(INSTALL_ROOT)$(libdir) install-apilib-directory: $(INSTALL_DIRECTORY) $(INSTALL_APILIB_DIRECTORY) diff --git a/config.h.in b/config.h.in index b6b23673..090c670d 100644 --- a/config.h.in +++ b/config.h.in @@ -2,14 +2,14 @@ * BRLTTY - A background process providing access to the console screen (when in * text mode) for a blind person using a refreshable braille display. * - * Copyright (C) 1995-2017 by The BRLTTY Developers. + * Copyright (C) 1995-2018 by The BRLTTY Developers. * * BRLTTY comes with ABSOLUTELY NO WARRANTY. * * This is free software, placed under the terms of the - * GNU General Public License, as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any - * later version. Please see the file LICENSE-GPL for details. + * GNU Lesser General Public License, as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any + * later version. Please see the file LICENSE-LGPL for details. * * Web Page: http://brltty.com/ * @@ -272,6 +272,9 @@ extern "C" { /* Define this to be a string containing the path to the tables directory. */ #undef TABLES_DIRECTORY +/* Define this to be a string containing the path to the LibLouis tables directory. */ +#undef LOUIS_TABLES_DIRECTORY + /* Define this to be a string containing the path to the configuration directory. */ #undef CONFIGURATION_DIRECTORY @@ -299,7 +302,7 @@ extern "C" { /* Define this to be a string containing a list of the braille driver codes. */ #undef BRAILLE_DRIVER_CODES -/* Define this to be a string containing the default braille driver parameters. */ +/* Define this to be a string containing the default parameters for the braille driver(s). */ #undef BRAILLE_PARAMETERS /* Define this to be a string containing the path to the directory containing the devices. */ @@ -466,7 +469,7 @@ extern "C" { /* Define this to be a string containing a list of the speech driver codes. */ #undef SPEECH_DRIVER_CODES -/* Define this to be a string containing the default speech driver parameters. */ +/* Define this to be a string containing the default parameters for the speech driver(s). */ #undef SPEECH_PARAMETERS /* Define this to be a string containing the default screen driver code. */ @@ -475,7 +478,7 @@ extern "C" { /* Define this to be a string containing a list of the screen driver codes. */ #undef SCREEN_DRIVER_CODES -/* Define this to be a string containing the default screen driver parameters. */ +/* Define this to be a string containing the default parameters for the screen driver(s). */ #undef SCREEN_PARAMETERS /* Define this to include contraction table support. */ @@ -505,7 +508,7 @@ extern "C" { /* Define this if the application programming interface is to be included. */ #undef ENABLE_API -/* Define this to be a string containing the default application programming interface parameters. */ +/* Define this to be a string containing the default parameters for the application programming interface. */ #undef API_PARAMETERS /* Define this if shared object support is to be included. */ diff --git a/config.mk.in b/config.mk.in index 686f547e..ead6ca34 100644 --- a/config.mk.in +++ b/config.mk.in @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -106,6 +106,9 @@ POLKIT_PACKAGE = @polkit_package@ POLKIT_INCLUDES = @polkit_includes@ POLKIT_LIBS = @polkit_libs@ +LOUIS_INCLUDES = @louis_includes@ +LOUIS_LIBS = @louis_libs@ + ICU_INCLUDES = @icu_includes@ ICU_LIBS = @icu_libs@ @@ -248,10 +251,10 @@ LIBCXXFLAGS = $(CXXFLAGS) @LIBCXXFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ -LDLIBS = $(ICU_LIBS) $(POLKIT_LIBS) $(SYSTEM_LIBS) @LIBS@ +LDLIBS = $(ICU_LIBS) $(SYSTEM_LIBS) @LIBS@ -MKOBJ = @MKOBJ@ -MKMOD = @MKMOD@ +MKSHR = @MKSHR@ +MKREL = @MKREL@ MKLIB = @MKLIB@ CONFLIBDIR = @CONFLIBDIR@ STRIP = @STRIP@ @@ -412,3 +415,6 @@ INSTALL_API_BINDINGS = @install_api_bindings@ ALL_XBRLAPI = @all_xbrlapi@ INSTALL_XBRLAPI = @install_xbrlapi@ +ALL_BRLTTY_CTB = @all_brltty_ctb@ +INSTALL_BRLTTY_CTB = @install_brltty_ctb@ + diff --git a/config.sh.in b/config.sh.in index 0022be85..12317455 100644 --- a/config.sh.in +++ b/config.sh.in @@ -4,14 +4,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/configure b/configure index d65aea97..60aa6ad6 100755 --- a/configure +++ b/configure @@ -1,8 +1,8 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for BRLTTY 5.5. +# Generated by GNU Autoconf 2.69 for BRLTTY 5.6. # -# Report bugs to . +# Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -266,7 +266,7 @@ fi $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and brltty@mielke.cc + $as_echo "$0: Please tell bug-autoconf@gnu.org and brltty@brltty.com $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do @@ -580,9 +580,9 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='BRLTTY' PACKAGE_TARNAME='brltty' -PACKAGE_VERSION='5.5' -PACKAGE_STRING='BRLTTY 5.5' -PACKAGE_BUGREPORT='brltty@mielke.cc' +PACKAGE_VERSION='5.6' +PACKAGE_STRING='BRLTTY 5.6' +PACKAGE_BUGREPORT='brltty@brltty.com' PACKAGE_URL='http://brltty.com/' ac_unique_file="Programs/brltty.c" @@ -740,6 +740,7 @@ braille_libraries_mb braille_libraries_lt braille_libraries_lb libbraille_root +braille_libraries_ic braille_libraries_ir braille_libraries_hw braille_libraries_ht @@ -822,6 +823,11 @@ pgmpath_includes pgmpath_package install_contraction_tables contracted_braille_objects +install_brltty_ctb +all_brltty_ctb +louis_libs +louis_includes +louis_package system_libs system_includes system_package @@ -923,8 +929,8 @@ GREP CPP CONFLIBDIR MKLIB -MKMOD -MKOBJ +MKREL +MKSHR can_make_BrlAPIref can_make_manual INSTALL_DATA @@ -1068,6 +1074,7 @@ enable_x with_gui_toolkit with_system_package enable_contracted_braille +enable_liblouis enable_gpm with_pgmpath_package with_service_package @@ -1664,7 +1671,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures BRLTTY 5.5 to adapt to many kinds of systems. +\`configure' configures BRLTTY 5.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1730,7 +1737,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of BRLTTY 5.5:";; + short | recursive ) echo "Configuration of BRLTTY 5.6:";; esac cat <<\_ACEOF @@ -1751,6 +1758,7 @@ Optional Features: --disable-tcl-bindings Tcl bindings for BrlAPI --disable-x support for X11 --disable-contracted-braille in-line contracted braille + --disable-liblouis support for LibLouis-based contracted braille --disable-gpm mouse tracking via GPM --disable-speech-support support for speech synthesizers and text-to-speech engines @@ -1781,8 +1789,9 @@ Optional Packages: path to directory containing header files --with-init-path=FILE path to real init program --with-stderr-path=FILE path to standard error log file - --with-api-parameters=DRIVER:PARAMETER=SETTING... (comma-separated) - default parameters for the api driver(s) + --with-api-parameters=PARAMETER=SETTING... (comma-separated) + default parameters for the application + programming interface --with-api-socket-path=PATH where local sockets for teh api are stored --with-tcl-config=PATH the path to the Tcl configuration script (tclConfig.sh) or to the directory containing @@ -1836,6 +1845,7 @@ Optional Packages: - ht HandyTech - hw HumanWare - ir Iris + - ic Inceptor - lb Libbraille - lt LogText - mb MultiBraille @@ -1954,6 +1964,7 @@ Optional Packages: - ta Tamil - te Telugu - tr Turkish + - uk Ukrainian - vi Vietnamese --with-attributes-table=FILE built-in (fallback) attributes table - left_right foreground colour in the left @@ -2024,7 +2035,7 @@ Some influential environment variables: Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to . +Report bugs to . BRLTTY home page: . _ACEOF ac_status=$? @@ -2088,7 +2099,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -BRLTTY configure 5.5 +BRLTTY configure 5.6 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2373,9 +2384,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------- ## -## Report this to brltty@mielke.cc ## -## ------------------------------- ##" +( $as_echo "## -------------------------------- ## +## Report this to brltty@brltty.com ## +## -------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac @@ -2807,7 +2818,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by BRLTTY $as_me 5.5, which was +It was created by BRLTTY $as_me 5.6, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3161,7 +3172,7 @@ api_major=0 api_minor=6 -api_revision=6 +api_revision=7 api_version=${api_major}.${api_minor} @@ -5769,51 +5780,34 @@ test "${LINUXDOC}" = "false" && can_make_manual=no || can_make_manual=yes test "${DOXYGEN}" = "false" && can_make_BrlAPIref=no || can_make_BrlAPIref=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for make relocatable object command" >&5 -$as_echo_n "checking for make relocatable object command... " >&6; } -if ${brltty_cv_prog_mkobj+:} false; then : - $as_echo_n "(cached) " >&6 -else - case "${host_os}" -in - *) - brltty_cv_prog_mkobj="\$(LD) -r -o" - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $brltty_cv_prog_mkobj" >&5 -$as_echo "$brltty_cv_prog_mkobj" >&6; } -MKOBJ="${brltty_cv_prog_mkobj}" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for loadable module creation command" >&5 -$as_echo_n "checking for loadable module creation command... " >&6; } -if ${brltty_cv_prog_mkmod+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared object creation command" >&5 +$as_echo_n "checking for shared object creation command... " >&6; } +if ${brltty_cv_prog_make_object_shared+:} false; then : $as_echo_n "(cached) " >&6 else case "${host_os}" in linux*|gnu*|openbsd*|freebsd*|kfreebsd*|netbsd*|*qnx*|cygwin*|mingw*|elf*) - brltty_mkmod_ld_make="-shared" + brltty_mkshr_ld_make="-shared" ;; solaris*) - brltty_mkmod_ld_make="-G" + brltty_mkshr_ld_make="-G" ;; hpux*) - brltty_mkmod_ld_make="-b" + brltty_mkshr_ld_make="-b" ;; osf*) - brltty_mkmod_ld_make="-shared" + brltty_mkshr_ld_make="-shared" ;; darwin*) - brltty_mkmod_ld_make="-bundle" - brltty_mkmod_ld_options="-flat_namespace -undefined suppress" - brltty_mkmod_gcc_make="-bundle" + brltty_mkshr_ld_make="-bundle" + brltty_mkshr_ld_options="-flat_namespace -undefined suppress" + brltty_mkshr_gcc_make="-bundle" ;; msdos*) - brltty_mkmod_ld_make="not_supported_on_msdos" - brltty_mkmod_ld_options="not_supported_on_msdos" - brltty_mkmod_gcc_make="not_supported_on_msdos" + brltty_mkshr_ld_make="not_supported_on_msdos" + brltty_mkshr_ld_options="not_supported_on_msdos" + brltty_mkshr_gcc_make="not_supported_on_msdos" ;; *) as_fn_error $? "loadable module creation command not configured for ${host_os}" "$LINENO" 5 @@ -5821,19 +5815,36 @@ in esac if test "${GCC}" = "yes" then - brltty_cv_prog_mkmod="\$(CC) ${brltty_mkmod_gcc_make=-shared} `echo "${brltty_mkmod_ld_options}" | sed -e ' + brltty_cv_prog_make_object_shared="\$(CC) ${brltty_mkshr_gcc_make=-shared} `echo "${brltty_mkshr_ld_options}" | sed -e ' /^$/d s/^ */-Wl / s/ *$// s/ */,/g '` -o" else - brltty_cv_prog_mkmod="\$(LD) ${brltty_mkmod_ld_make} ${brltty_mkmod_ld_options} -o" + brltty_cv_prog_make_object_shared="\$(LD) ${brltty_mkshr_ld_make} ${brltty_mkshr_ld_options} -o" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $brltty_cv_prog_mkmod" >&5 -$as_echo "$brltty_cv_prog_mkmod" >&6; } -MKMOD="${brltty_cv_prog_mkmod}" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $brltty_cv_prog_make_object_shared" >&5 +$as_echo "$brltty_cv_prog_make_object_shared" >&6; } +MKSHR="${brltty_cv_prog_make_object_shared}" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for make relocatable object command" >&5 +$as_echo_n "checking for make relocatable object command... " >&6; } +if ${brltty_cv_prog_make_object_relocatable+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "${host_os}" +in + *) + brltty_cv_prog_make_object_relocatable="\$(LD) -r -o" + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $brltty_cv_prog_make_object_relocatable" >&5 +$as_echo "$brltty_cv_prog_make_object_relocatable" >&6; } +MKREL="${brltty_cv_prog_make_object_relocatable}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dynamic library creation command" >&5 @@ -7442,7 +7453,7 @@ else ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by +# Copyright (C) 2006-2018 by # Samuel Thibault # Sébastien Hinderer # @@ -7982,7 +7993,7 @@ else ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # @@ -8480,7 +8491,7 @@ else ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2005-2017 by +# Copyright (C) 2005-2018 by # Alexis Robert # Samuel Thibault # @@ -8500,6 +8511,16 @@ else PYTHON_OK=true +# Suppress a new warning introduced in Python 3.6: +# +# Python runtime initialized with LC_CTYPE=C +# (a locale with default ASCII encoding), +# which may cause Unicode compatibility problems. +# Using C.UTF-8, C.utf8, or UTF-8 (if available) +# as alternative Unicode-compatible locales is recommended. +# +export PYTHONCOERCECLOCALE=0 + # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -8747,7 +8768,7 @@ else ############################################################################### # libbrlapi - A library providing access to braille terminals for applications. # -# Copyright (C) 2006-2017 by Dave Mielke +# Copyright (C) 2006-2018 by Dave Mielke # # libbrlapi comes with ABSOLUTELY NO WARRANTY. # @@ -9145,6 +9166,54 @@ _ACEOF brltty_summary_lines="${brltty_summary_lines} curses-package: ${curses_package}" } +if test -n "${curses_package}" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intrflush in -ltinfo" >&5 +$as_echo_n "checking for intrflush in -ltinfo... " >&6; } +if ${ac_cv_lib_tinfo_intrflush+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ltinfo $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char intrflush (); +int +main () +{ +return intrflush (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_tinfo_intrflush=yes +else + ac_cv_lib_tinfo_intrflush=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_intrflush" >&5 +$as_echo "$ac_cv_lib_tinfo_intrflush" >&6; } +if test "x$ac_cv_lib_tinfo_intrflush" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBTINFO 1 +_ACEOF + + LIBS="-ltinfo $LIBS" + +fi + +fi curses_libs="${LIBS%${brltty_curses_libs_save}}" LIBS="${brltty_curses_libs_save}" @@ -11144,9 +11213,94 @@ else $as_echo "#define ENABLE_CONTRACTED_BRAILLE 1" >>confdefs.h - contracted_braille_objects='ctb_compile.$O ctb_translate.$O' + + all_brltty_ctb="all-brltty-ctb" + install_brltty_ctb="install-brltty-ctb" + + contracted_braille_objects='ctb_compile.$O ctb_translate.$O ctb_native.$O ctb_external.$O' install_contraction_tables=install-contraction-tables + louis_includes="" + louis_libs="" + # Check whether --enable-liblouis was given. +if test "${enable_liblouis+set}" = set; then : + enableval=$enable_liblouis; +else + enableval="yes" +fi + + +brltty_enabled_liblouis="${enableval}" +brltty_summary_lines="${brltty_summary_lines} + liblouis: ${brltty_enabled_liblouis}" + +if test "${enableval}" = "no" +then + : +else + if test "${enableval}" = "yes" + then + brltty_ok=true + else + brltty_ok=false + fi + + if "${brltty_ok}" + then + louis_package="" +louis_includes="" +louis_libs="" + +for package_specification in liblouis +do + ${PKG_CONFIG} --exists "${package_specification}" && { + $as_echo "#define HAVE_PKG_LOUIS 1" >>confdefs.h + + + louis_package="${package_specification%% *}" + { $as_echo "$as_me:${as_lineno-$LINENO}: louis package: ${louis_package}" >&5 +$as_echo "$as_me: louis package: ${louis_package}" >&6;} + + louis_includes=`${PKG_CONFIG} --cflags-only-I "${louis_package}"` + { $as_echo "$as_me:${as_lineno-$LINENO}: louis includes: ${louis_includes}" >&5 +$as_echo "$as_me: louis includes: ${louis_includes}" >&6;} + + louis_libs=`${PKG_CONFIG} ${pkgconfig_flags_libs} "${louis_package}"` + { $as_echo "$as_me:${as_lineno-$LINENO}: louis libs: ${louis_libs}" >&5 +$as_echo "$as_me: louis libs: ${louis_libs}" >&6;} + + louisTablesDirectory=`${PKG_CONFIG} --variable=tablesdir liblouis` + if test -n "${louisTablesDirectory}" + then + +cat >>confdefs.h <<_ACEOF +#define LOUIS_TABLES_DIRECTORY "${louisTablesDirectory}" +_ACEOF + + contracted_braille_objects="${contracted_braille_objects} ctb_louis.\$O" + fi + + break + } +done + +test -n "${louis_package}" || { + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: louis support not available" >&5 +$as_echo "$as_me: WARNING: louis support not available" >&2;} +} + + + + + + + else + as_fn_error $? "invalid selection: --enable-liblouis=${enableval}" "$LINENO" 5 + fi +fi + + + else as_fn_error $? "invalid selection: --enable-contracted-braille=${enableval}" "$LINENO" 5 fi @@ -11154,6 +11308,8 @@ fi + + # Check whether --enable-gpm was given. if test "${enable_gpm+set}" = set; then : enableval=$enable_gpm; @@ -13766,7 +13922,13 @@ then ports_package="kfreebsd" ;; linux*) - ports_package="glibc" + ac_fn_c_check_func "$LINENO" "ioperm" "ac_cv_func_ioperm" +if test "x$ac_cv_func_ioperm" = xyes; then : + + ports_package="glibc" + +fi + ;; mingw*) ports_package="windows" @@ -13944,6 +14106,11 @@ brltty_item_codes_braille="${brltty_item_codes_braille} ir" brltty_item_names_braille="${brltty_item_names_braille} Iris" braille_libraries_ir='' +brltty_item_entries_braille="${brltty_item_entries_braille} ic-Inceptor" +brltty_item_codes_braille="${brltty_item_codes_braille} ic" +brltty_item_names_braille="${brltty_item_names_braille} Inceptor" +braille_libraries_ic='' + # Check whether --with-libbraille was given. if test "${with_libbraille+set}" = set; then : @@ -14596,6 +14763,7 @@ brltty_summary_lines="${brltty_summary_lines} + brltty_default_table="en-nabcc" @@ -16822,7 +16990,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by BRLTTY $as_me 5.5, which was +This file was extended by BRLTTY $as_me 5.6, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16882,14 +17050,14 @@ $config_headers Configuration commands: $config_commands -Report bugs to . +Report bugs to . BRLTTY home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -BRLTTY config.status 5.5 +BRLTTY config.status 5.6 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 5e94d33b..eaa73bdb 100644 --- a/configure.ac +++ b/configure.ac @@ -3,14 +3,14 @@ dnl Process this file with autoconf 2.53 to produce a configure script. # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -18,12 +18,12 @@ dnl Process this file with autoconf 2.53 to produce a configure script. ############################################################################### AC_PREREQ([2.64]) -AC_INIT([BRLTTY], [5.5], [brltty@mielke.cc], [brltty], [http://brltty.com/]) +AC_INIT([BRLTTY], [5.6], [brltty@brltty.com], [brltty], [http://brltty.com/]) AC_CONFIG_SRCDIR([Programs/brltty.c]) AC_SUBST([api_major], [0]) AC_SUBST([api_minor], [6]) -AC_SUBST([api_revision], [6]) +AC_SUBST([api_revision], [7]) AC_SUBST([api_version], [${api_major}.${api_minor}]) AC_SUBST([api_release], [${api_version}.${api_revision}]) @@ -428,40 +428,30 @@ AC_SUBST([can_make_manual]) test "${DOXYGEN}" = "false" && can_make_BrlAPIref=no || can_make_BrlAPIref=yes AC_SUBST([can_make_BrlAPIref]) -AC_CACHE_CHECK([for make relocatable object command], [brltty_cv_prog_mkobj], [dnl -case "${host_os}" -in - *) - brltty_cv_prog_mkobj="\$(LD) -r -o" - ;; -esac]) -MKOBJ="${brltty_cv_prog_mkobj}" -AC_SUBST([MKOBJ]) - -AC_CACHE_CHECK([for loadable module creation command], [brltty_cv_prog_mkmod], [dnl +AC_CACHE_CHECK([for shared object creation command], [brltty_cv_prog_make_object_shared], [dnl case "${host_os}" in linux*|gnu*|openbsd*|freebsd*|kfreebsd*|netbsd*|*qnx*|cygwin*|mingw*|elf*) - brltty_mkmod_ld_make="-shared" + brltty_mkshr_ld_make="-shared" ;; solaris*) - brltty_mkmod_ld_make="-G" + brltty_mkshr_ld_make="-G" ;; hpux*) - brltty_mkmod_ld_make="-b" + brltty_mkshr_ld_make="-b" ;; osf*) - brltty_mkmod_ld_make="-shared" + brltty_mkshr_ld_make="-shared" ;; darwin*) - brltty_mkmod_ld_make="-bundle" - brltty_mkmod_ld_options="-flat_namespace -undefined suppress" - brltty_mkmod_gcc_make="-bundle" + brltty_mkshr_ld_make="-bundle" + brltty_mkshr_ld_options="-flat_namespace -undefined suppress" + brltty_mkshr_gcc_make="-bundle" ;; msdos*) - brltty_mkmod_ld_make="not_supported_on_msdos" - brltty_mkmod_ld_options="not_supported_on_msdos" - brltty_mkmod_gcc_make="not_supported_on_msdos" + brltty_mkshr_ld_make="not_supported_on_msdos" + brltty_mkshr_ld_options="not_supported_on_msdos" + brltty_mkshr_gcc_make="not_supported_on_msdos" ;; *) AC_MSG_ERROR([loadable module creation command not configured for ${host_os}]) @@ -469,11 +459,21 @@ in esac if test "${GCC}" = "yes" then - brltty_cv_prog_mkmod="\$(CC) ${brltty_mkmod_gcc_make=-shared} BRLTTY_OPTIONS_LD2CC([${brltty_mkmod_ld_options}]) -o" + brltty_cv_prog_make_object_shared="\$(CC) ${brltty_mkshr_gcc_make=-shared} BRLTTY_OPTIONS_LD2CC([${brltty_mkshr_ld_options}]) -o" else - brltty_cv_prog_mkmod="\$(LD) ${brltty_mkmod_ld_make} ${brltty_mkmod_ld_options} -o" + brltty_cv_prog_make_object_shared="\$(LD) ${brltty_mkshr_ld_make} ${brltty_mkshr_ld_options} -o" fi]) -AC_SUBST([MKMOD], ["${brltty_cv_prog_mkmod}"]) +AC_SUBST([MKSHR], ["${brltty_cv_prog_make_object_shared}"]) + +AC_CACHE_CHECK([for make relocatable object command], [brltty_cv_prog_make_object_relocatable], [dnl +case "${host_os}" +in + *) + brltty_cv_prog_make_object_relocatable="\$(LD) -r -o" + ;; +esac]) +MKREL="${brltty_cv_prog_make_object_relocatable}" +AC_SUBST([MKREL]) AC_CACHE_CHECK([for dynamic library creation command], [brltty_cv_prog_mklib], [dnl case "${host_os}" @@ -721,6 +721,10 @@ BRLTTY_PACKAGE_CHOOSE([curses], [pdcursesu curses.h], [curses curses.h], [pdcurses curses.h]) +if test -n "${curses_package}" +then + AC_CHECK_LIB([tinfo], [intrflush]) +fi curses_libs="${LIBS%${brltty_curses_libs_save}}" LIBS="${brltty_curses_libs_save}" AC_SUBST([curses_libs]) @@ -1087,9 +1091,35 @@ BRLTTY_ARG_DISABLE( [dnl AC_DEFINE([ENABLE_CONTRACTED_BRAILLE], [1], [Define this to include contraction table support.]) - contracted_braille_objects='ctb_compile.$O ctb_translate.$O' + + all_brltty_ctb="all-brltty-ctb" + install_brltty_ctb="install-brltty-ctb" + + contracted_braille_objects='ctb_compile.$O ctb_translate.$O ctb_native.$O ctb_external.$O' install_contraction_tables=install-contraction-tables + + louis_includes="" + louis_libs="" + BRLTTY_ARG_DISABLE( + [liblouis], + [support for LibLouis-based contracted braille], + [], + [dnl + BRLTTY_HAVE_PACKAGE([louis], [liblouis], [dnl + louisTablesDirectory=`${PKG_CONFIG} --variable=tablesdir liblouis` + if test -n "${louisTablesDirectory}" + then + AC_DEFINE_UNQUOTED([LOUIS_TABLES_DIRECTORY], ["${louisTablesDirectory}"], + [Define this to be a string containing the path to the LibLouis tables directory.]) + contracted_braille_objects="${contracted_braille_objects} ctb_louis.\$O" + fi + ]) + ]) + AC_SUBST([louis_includes]) + AC_SUBST([louis_libs]) ]) +AC_SUBST([all_brltty_ctb]) +AC_SUBST([install_brltty_ctb]) AC_SUBST([contracted_braille_objects]) AC_SUBST([install_contraction_tables]) @@ -1446,7 +1476,9 @@ BRLTTY_ARG_PACKAGE([ports], [I/O ports], [], [dnl ports_package="kfreebsd" ;; linux*) - ports_package="glibc" + AC_CHECK_FUNC([ioperm], [ + ports_package="glibc" + ]) ;; mingw*) ports_package="windows" @@ -1476,6 +1508,7 @@ BRLTTY_BRAILLE_DRIVER([hm], [HIMS]) BRLTTY_BRAILLE_DRIVER([ht], [HandyTech]) BRLTTY_BRAILLE_DRIVER([hw], [HumanWare]) BRLTTY_BRAILLE_DRIVER([ir], [Iris]) +BRLTTY_BRAILLE_DRIVER([ic], [Inceptor]) BRLTTY_IF_PACKAGE([Libbraille], [libbraille], [include/braille.h], [dnl BRLTTY_BRAILLE_DRIVER([lb], [Libbraille], [-L$(LIBBRAILLE_ROOT)/lib -lbraille]) ]) @@ -1687,6 +1720,7 @@ BRLTTY_TEXT_TABLE([sw], [Swahili]) BRLTTY_TEXT_TABLE([ta], [Tamil]) BRLTTY_TEXT_TABLE([te], [Telugu]) BRLTTY_TEXT_TABLE([tr], [Turkish]) +BRLTTY_TEXT_TABLE([uk], [Ukrainian]) BRLTTY_TEXT_TABLE([vi], [Vietnamese]) BRLTTY_ARG_TABLE([text], [en-nabcc], [ttb]) diff --git a/document.mk b/document.mk index a884fecc..50b32b80 100644 --- a/document.mk +++ b/document.mk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/gendeps b/gendeps index bb1244ed..6694e9a1 100755 --- a/gendeps +++ b/gendeps @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/getrevid b/getrevid index f7d55e2d..7fbf2cc3 100755 --- a/getrevid +++ b/getrevid @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/mk4build b/mk4build index db90c86a..8d02bef8 100755 --- a/mk4build +++ b/mk4build @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/mkdocktb b/mkdocktb index c5d85e7b..aa194822 100755 --- a/mkdocktb +++ b/mkdocktb @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/mkdocs b/mkdocs index 03e01b9b..33813e45 100755 --- a/mkdocs +++ b/mkdocs @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/mkpot b/mkpot index d6f4ff7b..301c1323 100755 --- a/mkpot +++ b/mkpot @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/mkrpm b/mkrpm index 2b0b9fce..b4934305 100755 --- a/mkrpm +++ b/mkrpm @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/mktar b/mktar index eeeecbba..8486337f 100755 --- a/mktar +++ b/mktar @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/mkzip b/mkzip index ffcfbd1b..311c35f0 100755 --- a/mkzip +++ b/mkzip @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/prologue.mk b/prologue.mk index 82af5017..e5bdc0cd 100644 --- a/prologue.mk +++ b/prologue.mk @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/prologue.sh b/prologue.sh index 97dadc17..e8d55576 100644 --- a/prologue.sh +++ b/prologue.sh @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/prologue.tcl b/prologue.tcl index 6f7766aa..5972346a 100644 --- a/prologue.tcl +++ b/prologue.tcl @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/run-brltty b/run-brltty index e03ca60d..b64ce036 100755 --- a/run-brltty +++ b/run-brltty @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/run-command b/run-command index bd66d7d4..b423afa8 100755 --- a/run-command +++ b/run-command @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/run-xbrlapi b/run-xbrlapi index 8abfa021..8e69e218 100755 --- a/run-xbrlapi +++ b/run-xbrlapi @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # diff --git a/screen.mk b/screen.mk index 0f443c31..e246d92d 100644 --- a/screen.mk +++ b/screen.mk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -23,7 +23,7 @@ SCR_MOD_NAME = $(BLD_TOP)$(DRV_DIR)/$(MOD_NAME)x$(DRIVER_CODE) SCR_MOD_FILE = $(SCR_MOD_NAME).$(MOD_EXT) $(SCR_MOD_FILE): screen.$O $(INSTALL_DIRECTORY) $(@D) - $(MKMOD) $(@) screen.$O $(SCR_OBJS) + $(MKSHR) $(@) screen.$O $(SCR_OBJS) screen-driver: $(SCR_MOD_FILE) install:: diff --git a/speech.mk b/speech.mk index 5fb29594..01ed97d9 100644 --- a/speech.mk +++ b/speech.mk @@ -2,14 +2,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # @@ -23,7 +23,7 @@ SPK_MOD_NAME = $(BLD_TOP)$(DRV_DIR)/$(MOD_NAME)s$(DRIVER_CODE) SPK_MOD_FILE = $(SPK_MOD_NAME).$(MOD_EXT) $(SPK_MOD_FILE): speech.$O $(INSTALL_DIRECTORY) $(@D) - $(MKMOD) $(@) speech.$O $(SPK_OBJS) + $(MKSHR) $(@) speech.$O $(SPK_OBJS) speech-driver: $(SPK_MOD_FILE) install:: diff --git a/updusbdevs b/updusbdevs index c21f3b1e..b44173f5 100755 --- a/updusbdevs +++ b/updusbdevs @@ -3,14 +3,14 @@ # BRLTTY - A background process providing access to the console screen (when in # text mode) for a blind person using a refreshable braille display. # -# Copyright (C) 1995-2017 by The BRLTTY Developers. +# Copyright (C) 1995-2018 by The BRLTTY Developers. # # BRLTTY comes with ABSOLUTELY NO WARRANTY. # # This is free software, placed under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any -# later version. Please see the file LICENSE-GPL for details. +# GNU Lesser General Public License, as published by the Free Software +# Foundation; either version 2.1 of the License, or (at your option) any +# later version. Please see the file LICENSE-LGPL for details. # # Web Page: http://brltty.com/ # -- GitLab