{ "info": { "author": "Jens Diemer", "author_email": "dwload_server@jensdiemer.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: MacOS X", "Environment :: Other Environment", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications", "Intended Audience :: Developers", "Intended Audience :: Education", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Assemblers", "Topic :: Software Development :: Testing", "Topic :: System :: Emulators" ], "description": "=============\nDWLOAD Server\n=============\n\nDWLOAD server implemented in Python (OpenSource, GPL v3 or above).\n\n--------\nfeatures\n--------\n\nHere a feature list:\n\n* load/save files via DWLOAD\n\n* on-the-fly converting ASCII BASIC listing (see below)\n\n* dynamic \"AUTOLOAD.DWL\" (see below)\n\n* backup all files on save\n\n* Support `USB Adapter `_ and `Becker TCP/IP Interface `_.\n\ncurrent state\n=============\n\nOnly tested with Python 3 !\n\nTested DWEEBS:\n\n+------------+-------------------------------+------------------------------------------------+\n| DWEEB | example | Description |\n+============+===============================+================================================+\n| **DLOAD** | ``DLOAD`` | Load ``AUTOLOAD.DWL`` (Used on Dragon startup) |\n+------------+-------------------------------+------------------------------------------------+\n| **SAVE** | ``DLOAD\"SAVE\"\"MYFILE.BAS\"`` | Save BASIC listing |\n+------------+-------------------------------+------------------------------------------------+\n| **RESAVE** | ``DLOAD\"RESAVE\"\"MYFILE.BAS\"`` | Save BASIC listing |\n+------------+-------------------------------+------------------------------------------------+\n\nImplemented DriveWire Transactions:\n\n+-----+-----+-------------------+--------------------------------------------------------------------------+\n| hex | dez | DW name | Description |\n+=====+=====+===================+==========================================================================+\n| $01 | 1 | OP_NAMEOBJ_MOUNT | Mount a file to a virtual drive number |\n+-----+-----+-------------------+--------------------------------------------------------------------------+\n| $02 | 2 | OP_NAMEOBJ_CREATE | (Does in this implementation the same as OP_NAMEOBJ_MOUNT) |\n+-----+-----+-------------------+--------------------------------------------------------------------------+\n| $d2 | 210 | OP_READEX | Send 256 bytes sector from the DWLOAD server to the client |\n+-----+-----+-------------------+--------------------------------------------------------------------------+\n| $57 | 87 | OP_WRITE | Write 256 bytes sector of data from the client into a file on the server |\n+-----+-----+-------------------+--------------------------------------------------------------------------+\n\nTODO\n====\n\n* enhance ``AUTOLOAD.DWL.py``, see: `http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4977 `_\n\n* compare checksum\n\n* add support for Python 2.7\n\n* write unittests\n\npyscripts\n=========\n\nThere is a general machanism to generate DLOAD responses via Python:\n\n* Store in server root a python script, e.g.: \"FOO.BAR.py\"\n\n* DLOAD the file (without .py extension) on client, e.g.: ``DLOAD\"FOO.BAR\"``\n\nThe script will be called via subprocess and it must write the Dragon DOS binary data back to stdout.\n\nCurrently there is only one *pyscript* file: ``AUTOLOAD.DWL.py`` (see below)\n\ndynamic \"AUTOLOAD.DWL\"\n----------------------\n\nThere exist a way to generate a dynamic DWLOAD menu.\nJust copy the file `/dwload-demo-files/AUTOLOAD.DWL.py `_ into your server root.\n\nThe generated listing looks like this:\n\n::\n\n 10 CLS\n 20 PRINT\" *** DYNAMIC MENU *** 14:11:18\"\n 30 PRINT\"/HOME/JENS/DWLOAD-FILES\"\n 40 PRINT\" 0 - HEXVIEW.BAS\"\n 50 PRINT\" 1 - TEST.BAS\"\n 60 PRINT\" 2 - SAVE\"\n 70 PRINT\"PLEASE SELECT (X FOR RELOAD) !\"\n 80 A$=INKEY$:IF A$=\"\" GOTO 80\n 90 IF A$=\"X\" THEN DLOAD\n 100 IF A$=\"0\" THEN DLOAD\"HEXVIEW.BAS\"\n 110 IF A$=\"1\" THEN DLOAD\"TEST.BAS\"\n 120 IF A$=\"2\" THEN DLOAD\"SAVE\"\n 130 GOTO 10\n\ns.: `http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4977`_\n\nThis feature make the following file:\n\n+---------------------------------------------+---------------------------------+\n| `/dwload_server/hooks/dynamic_dwl.py`_ | general API to 'pyscript' files |\n+---------------------------------------------+---------------------------------+\n| `/dwload_server/pyscripts/autoload_dwl.py`_ | generates the DWLOAD menu |\n+---------------------------------------------+---------------------------------+\n\n.. _/dwload_server/hooks/dynamic_dwl.py: https://github.com/6809/DwLoadServer/blob/master/dwload_server/hooks/dynamic_dwl.py\n.. _/dwload_server/pyscripts/autoload_dwl.py: https://github.com/6809/DwLoadServer/blob/master/dwload_server/pyscripts/autoload_dwl.py\n\non-the-fly converting ASCII BASIC listing\n=========================================\n\nThe server read/save ASCII BASIC listing and send/store them to the DWLOAD client on-the-fly.\nSo you can edit listings on your PC and try them on your Dragon without any external conventions!\n\ne.g.: save\n\n::\n\n 10 PRINT\"HELLO WORLD!\"\n DLOAD\"SAVE\"\"HELLO.BAS\"\n DWLOAD\n !\n OK\n\nThe server will create two files:\n\n+-----------+----------------------+------------------------------------------------------------------+\n| filename | format | description |\n+===========+======================+==================================================================+\n| HELLO.DWL | raw tokenized binary | Dragon DOS Binary Format data from the Dragon (256 Bytes padded) |\n+-----------+----------------------+------------------------------------------------------------------+\n| HELLO.BAS | ASCII listing | on-the-fly converted ASCII BASIC listing |\n+-----------+----------------------+------------------------------------------------------------------+\n\ne.g. load (and execute):\n\n::\n\n DLOAD\"HELLO.BAS\"\n !HELLO WORLD!\n OK\n\n(Note: the first ``!`` is from DWLOAD ROM routine)\n\nThe server will read the ``HELLO.BAS`` ASCII listing and convert is on-the-fly to the needed Dragon DOS Binary Format\nand send this back to the Dragon.\n\nThis feature make the following files:\n\n+---------------------------------------+-------------------------------------------------+\n| `/dwload_server/hooks/read_ascii.py`_ | read ASCII listing and send as binary to client |\n+---------------------------------------+-------------------------------------------------+\n| `/dwload_server/hooks/save_ascii.py`_ | save binary from client as ASCII on server |\n+---------------------------------------+-------------------------------------------------+\n\n.. _/dwload_server/hooks/read_ascii.py: https://github.com/6809/DwLoadServer/blob/master/dwload_server/hooks/read_ascii.py\n.. _/dwload_server/hooks/save_ascii.py: https://github.com/6809/DwLoadServer/blob/master/dwload_server/hooks/save_ascii.py\n\n------------\ninstallation\n------------\n\nLinux\n=====\n\nThe is a virtualenv bootstrap file, created with `bootstrap_env `_, for easy installation.\n\nGet the bootstrap file:\n\n::\n\n /home/FooBar$ wget https://raw.githubusercontent.com/6809/DwLoadServer/master/boot_dwload_server.py\n\nThere are tree types of installation:\n\n+------------------+------------------------------------------------------------------------+\n| option | desciption |\n+==================+========================================================================+\n| **pypi** | use `Python Package Index`_ (for all normal user!) |\n+------------------+------------------------------------------------------------------------+\n| **git_readonly** | use ``git`` to get the sourcecode (for developer without write access) |\n+------------------+------------------------------------------------------------------------+\n| **dev** | use ``git`` with write access |\n+------------------+------------------------------------------------------------------------+\n\n.. _Python Package Index: http://www.python.org/pypi/\n\ne.g.:\n\n::\n\n /home/FooBar$ python3 boot_dwload_server.py ~/DwLoadServer_env --install_type git_readonly\n\nThis creates a virtualenv in **``~/DwLoadServer_env``** and used ``git`` to checkout the needed repositories.\n\nIn this case (using --install_type=**git_readonly**) the git repository are in: **.../DwLoadServer_env/src/**\nSo you can easy update them e.g.:\n\n::\n\n /home/FooBar$ cd ~/DwLoadServer_env/src/dwload-server\n /home/FooBar/DwLoadServer_env/src/dwload-server$ git pull\n\nWindows\n=======\n\nThere are several ways to install the project under windows.\n\nThe following is hopeful the easiest one:\n\n* Install Python 3, e.g.: `https://www.python.org/downloads/ `_\n\n* Download the ``DWLOAD Server`` git snapshot from Github: `master.zip `_\n\n* Extract the Archive somewhere\n\n* Maybe, adjust paths in ``boot_dwload_server.cmd``\n\n* Run ``boot_dwload_server.cmd``\n\nThe default ``boot_dwload_server.cmd`` will install via ``Python Package Index`` (PyPi) into ``%APPDATA%\\DwLoadServer_env``\n\nThere are two batch files, for easy startup the server under Windows:\n\n* `/scripts/start_serial_DWLOAD_server.cmd `_\n\n* `/scripts/start_becker_DWLOAD_server.cmd `_\n\nCopy these files into ``%APPDATA%\\DwLoadServer_env\\`` and edit it for your needs.\nJust double click to start the server.\n\nstart by cli (windows)\n----------------------\n\nThere is a batch file to open a commandline with a activated virtualenv:\n\n* `/scripts/cmd_here.cmd `_\n\ncopy this into ``%APPDATA%\\DwLoadServer_env\\`` and double click it ;)\n\nby hand: Start **cmd.exe** and do this:\n\n::\n\n C:\\Windows\\system32>cd /d %APPDATA%\\DwLoadServer_env\\\n C:\\Users\\FOO\\AppData\\Roaming\\DwLoadServer_env>call Scripts\\activate.bat\n (DwLoadServer_env) C:\\Users\\FOO\\AppData\\Roaming\\DwLoadServer_env>\n\nSo use the DWLOAD-Server CLI, e.g:\n\n::\n\n (DwLoadServer_env) C:\\Users\\FOO\\AppData\\Roaming\\DwLoadServer_env> python.exe -m dwload_server.dwload_server_cli --root_dir=%APPDATA%\\dwload-files\\ --log_level=10 serial --port=COM3\n\nDo see the CLI help page:\n\n::\n\n (DwLoadServer_env) C:\\Users\\FOO\\AppData\\Roaming\\DwLoadServer_env> python.exe -m dwload_server.dwload_server_cli --help\n \n DWLOAD Server written in Python (GNU GPL v3+) v0.2.0\n \n usage: dwload_server_cli.py [-h] [--version] [--root_dir ROOT_DIR]\n [--log_level {0,10,20,30,30,40,50,99,100}]\n {becker,serial} ...\n \n optional arguments:\n -h, --help show this help message and exit\n --version show program's version number and exit\n --root_dir ROOT_DIR Server root directory for load/store requested files\n --log_level {0,10,20,30,30,40,50,99,100}\n Logging level: 10=DEBUG, 20=INFO, 30=WARNING,\n 40=ERROR, 50=CRITICAL/FATAL\n \n Interface:\n {becker,serial}\n becker Use the Becker interface\n serial Use the serial interface\n \n example usage:\n dwload_server_cli.py --root_dir=./dwload-files/ serial --port=/dev/ttyUSB0\n dwload_server_cli.py --root_dir=./dwload-files/ becker\n \n Interface help:\n dwload_server_cli.py serial --help\n dwload_server_cli.py becker --help\n\nstartup linux\n=============\n\nThere are two shell scripts, for easy startup the server under Linux:\n\n* `/scripts/start_serial_DWLOAD_server.sh `_\n\n* `/scripts/start_becker_DWLOAD_server.sh `_\n\nCopy these files into ``~/DwLoadServer_env/`` and edit it for your needs.\n\nThe default DWLOAD-Server-root-directory is: ``~/dwload-files/``\ne.g.: Download ``dwload-demo-files.tar.xz.zip`` from `http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4964 `_\nand extract the files into ``~/dwload-files/``\n\nstart by cli (linux)\n--------------------\n\ne.g.:\n\n::\n\n /home/FooBar $ cd ~/DwLoadServer_env/\n /home/FooBar/DwLoadServer_env/ $ source bin/activate\n (DwLoadServer_env) ~/DwLoadServer_env $ python3 -m dwload_server.dwload_server_cli --root_dir=~/dwload-files --log_level=10 serial --port=/dev/ttyUSB0\n\nDisplay CLI help, e.g:\n\n::\n\n /home/FooBar $ cd ~/DwLoadServer_env/\n /home/FooBar/DwLoadServer_env/ $ source bin/activate\n (DwLoadServer_env) ~/DwLoadServer_env $ python3 -m dwload_server.dwload_server_cli --help\n \n DWLOAD Server written in Python (GNU GPL v3+) v0.2.0\n \n usage: dwload_server_cli.py [-h] [--version] [--root_dir ROOT_DIR]\n [--log_level {0,10,20,30,30,40,50,99,100}]\n {becker,serial} ...\n \n optional arguments:\n -h, --help show this help message and exit\n --version show program's version number and exit\n --root_dir ROOT_DIR Server root directory for load/store requested files\n --log_level {0,10,20,30,30,40,50,99,100}\n Logging level: 10=DEBUG, 20=INFO, 30=WARNING,\n 40=ERROR, 50=CRITICAL/FATAL\n \n Interface:\n {becker,serial}\n becker Use the Becker interface\n serial Use the serial interface\n \n example usage:\n dwload_server_cli.py --root_dir=./dwload-files/ serial --port=/dev/ttyUSB0\n dwload_server_cli.py --root_dir=./dwload-files/ becker\n \n Interface help:\n dwload_server_cli.py serial --help\n dwload_server_cli.py becker --help\n\n-------\nHistory\n-------\n\n* 19.11.2014 - v0.3.0 - Convert \"ASCII BASIC listing\" <-> \"Dragon DOS Binary\" on-the-fly while read/write\n\n* 17.11.2014 - v0.2.0 - Support Becker and Serial interface.\n\n* 14.11.2014 - v0.1.0 - Create bootstrap file that work under linux and windows.\n\n* 12.11.2014 - v0.0.1 - send a file works rudimentary\n\n* 30.09.2014 - Idea was born: `Forum post 11893 `_\n\n-----\nLinks\n-----\n\n+--------------+---------------------------------------------------------------------+\n| Forum Thread | `http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=8&t=4946`_ |\n+--------------+---------------------------------------------------------------------+\n| IRC | `#pylucid on freenode.net`_ |\n+--------------+---------------------------------------------------------------------+\n| Jabber | pylucid@conference.jabber.org |\n+--------------+---------------------------------------------------------------------+\n| PyPi | `https://pypi.python.org/pypi/dwload_server/`_ |\n+--------------+---------------------------------------------------------------------+\n| Github | `https://github.com/6809/DwLoadServer`_ |\n+--------------+---------------------------------------------------------------------+\n\n.. _http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=8&t=4946: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=8&t=4946\n.. _#pylucid on freenode.net: http://www.pylucid.org/permalink/304/irc-channel\n.. _https://pypi.python.org/pypi/dwload_server/: https://pypi.python.org/pypi/dwload_server/\n.. _https://github.com/6809/DwLoadServer: https://github.com/6809/DwLoadServer\n\nsome project related links:\n\n* About DWLOAD: `http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4964`_\n\n* DWEEBS application Thread: `http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4968 `_\n\n* Dragon 32/64 DriveWire Adapter: `http://archive.worldofdragon.org/index.php?title=Dragon_32/64_Drivewire_Adapter `_\n\n* Drivewire for dummies: `http://archive.worldofdragon.org/index.php?title=Drivewire_for_dummies `_\n\n* `http://sourceforge.net/p/drivewireserver/wiki/DriveWire_Specification/ `_\n\n* `http://sourceforge.net/p/drivewireserver/wiki/ `_", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DWLOAD/DwLoadServer", "keywords": "6809 Dragon CoCo DriveWire", "license": "GPL v3+", "maintainer": null, "maintainer_email": null, "name": "dwload_server", "package_url": "https://pypi.org/project/dwload_server/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dwload_server/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/DWLOAD/DwLoadServer" }, "release_url": "https://pypi.org/project/dwload_server/0.4.0/", "requires_dist": null, "requires_python": null, "summary": "DWLOAD server implemented in Python", "version": "0.4.0" }, "last_serial": 1314378, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "384e01ba6057d5cb0ea3ddb1880ca97b", "sha256": "3122a021949c935c6fbd244c133dbcdf1a1e1b0f15546e09e9850c70cf14eb15" }, "downloads": -1, "filename": "dwload_server-0.1.0.tar.gz", "has_sig": false, "md5_digest": "384e01ba6057d5cb0ea3ddb1880ca97b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7470, "upload_time": "2014-11-14T09:00:20", "url": "https://files.pythonhosted.org/packages/47/d5/bd20ae921ffe0bd8d88512fc0663f77af84536dce7f7031312cd1b85011b/dwload_server-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "23480a42b164b56f8238580da773f8f8", "sha256": "f5a744012fd2287412ba9e68ad943e86e4d41c5507fdc781fa2183b9a0a7ed7a" }, "downloads": -1, "filename": "dwload_server-0.1.1.tar.gz", "has_sig": false, "md5_digest": "23480a42b164b56f8238580da773f8f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8819, "upload_time": "2014-11-14T14:18:31", "url": "https://files.pythonhosted.org/packages/f8/b9/b5f35e8be725d90e9b79c0b41070b7f7943b81cec0fe3da9a6bb9a0467f4/dwload_server-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d6b606ea4ec6655866cfcfd9abbeebda", "sha256": "ac19b297a7a34896428d7eda605deff7bd18753d6f70c9500a1eca2ebc2d06dd" }, "downloads": -1, "filename": "dwload_server-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d6b606ea4ec6655866cfcfd9abbeebda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1065203, "upload_time": "2014-11-17T13:21:55", "url": "https://files.pythonhosted.org/packages/4e/0e/ba7e56add4fa83e519c87c11c1e2ab42f86af3445ebf9a31435b42f77729/dwload_server-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "e229fb778054eaf6a1b1cecad9a939b7", "sha256": "fa3dc68b2174a50a63ad341c3cd2bc20a7008a1fa99fd340eb5d1c06fc5489d7" }, "downloads": -1, "filename": "dwload_server-0.3.0.tar.gz", "has_sig": false, "md5_digest": "e229fb778054eaf6a1b1cecad9a939b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1068863, "upload_time": "2014-11-19T12:29:14", "url": "https://files.pythonhosted.org/packages/0b/ef/285c091c0608824ec1ddbd3bc0eeab869df1a03367fa3aaf137fe63431d6/dwload_server-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "e9e0bf7b0b0fce1004a0f8a359fafa97", "sha256": "6bd22351454b917e12418ee85ef50a8e65bbb107dc14735599ed0e181d669ecc" }, "downloads": -1, "filename": "dwload_server-0.4.0.tar.gz", "has_sig": false, "md5_digest": "e9e0bf7b0b0fce1004a0f8a359fafa97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1074428, "upload_time": "2014-11-20T13:20:46", "url": "https://files.pythonhosted.org/packages/53/26/4aed9d310a7ced7f7482b2c38ec8c241d40b55731fcf8d4ba10836c38d85/dwload_server-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e9e0bf7b0b0fce1004a0f8a359fafa97", "sha256": "6bd22351454b917e12418ee85ef50a8e65bbb107dc14735599ed0e181d669ecc" }, "downloads": -1, "filename": "dwload_server-0.4.0.tar.gz", "has_sig": false, "md5_digest": "e9e0bf7b0b0fce1004a0f8a359fafa97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1074428, "upload_time": "2014-11-20T13:20:46", "url": "https://files.pythonhosted.org/packages/53/26/4aed9d310a7ced7f7482b2c38ec8c241d40b55731fcf8d4ba10836c38d85/dwload_server-0.4.0.tar.gz" } ] }