Package: dwload-server
DWLOAD ServerDWLOAD server implemented in Python (OpenSource, GPL v3 or above).Connect your Dragon 32 into your PC and LOAD/SAVE basic listings.Quickstart~$gitclonehttps://github.com/6809/DwLoadServer.git
~$cdDwLoadServer
~/DwLoadServer$./devshell.pyrunserialfeaturesload/save files via DWLOADon-the-fly converting ASCII BASIC listing (see below)dynamic "AUTOLOAD.DWL" (see below)backup all files on saveSupportUSB AdapterandBecker TCP/IP Interface.current stateTested DWEEBS:DWEEBexampleDescriptionDLOADDLOADLoadAUTOLOAD.DWL(Used on Dragon startup)SAVEDLOAD"SAVE""MYFILE.BAS"Save BASIC listingRESAVEDLOAD"RESAVE""MYFILE.BAS"Save BASIC listingImplemented DriveWire Transactions:hexdezDW nameDescription$000OP_NOPNOP Transaction -> ignored$011OP_NAMEOBJ_MOUNTMount a file to a virtual drive number$022OP_NAMEOBJ_CREATE(Does in this implementation the same as OP_NAMEOBJ_MOUNT)$d2210OP_READEXSend 256 bytes sector from the DWLOAD server to the client$5787OP_WRITEWrite 256 bytes sector of data from the client into a file on the serverTODOenhanceAUTOLOAD.DWL.py, see:http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4977compare checksumwrite unittestspyscriptsThere is a general machanism to generate DLOAD responses via Python:Store in server root a python script, e.g.: "FOO.BAR.py"DLOAD the file (without .py extension) on client, e.g.:DLOAD"FOO.BAR"The script will be called via subprocess and it must write the Dragon DOS binary data back to stdout.Currently, there is only onepyscriptfile:AUTOLOAD.DWL.py(see below)dynamic "AUTOLOAD.DWL"There exist a way to generate a dynamic DWLOAD menu.
Just copy the file/dwload-demo-files/AUTOLOAD.DWL.pyinto your server root.Thepyscriptreads the server root directory and list all files into the DLOAD menu.
e.g. the server root looks like this:/HOME/FOO/DWLOAD-FILES
  +--- AUTOLOAD.DWL.py
  +--- HEXVIEW.BAS
  +--- TEST.BAS
  \--- SAVEThe generated listing looks like this:10 CLS
20 PRINT" *** DYNAMIC MENU ***  14:11:18"
30 PRINT"/HOME/FOO/DWLOAD-FILES"
40 PRINT" 0 - HEXVIEW.BAS"
50 PRINT" 1 - TEST.BAS"
60 PRINT" 2 - SAVE"
70 PRINT"PLEASE SELECT (X FOR RELOAD) !"
80 A$=INKEY$:IF A$="" GOTO 80
90 IF A$="X" THEN DLOAD
100 IF A$="0" THEN DLOAD"HEXVIEW.BAS"
110 IF A$="1" THEN DLOAD"TEST.BAS"
120 IF A$="2" THEN DLOAD"SAVE"
130 GOTO 10s.:http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4977You must only callDLOADon you Dragon to get this menu. Because aDLOADwill requestAUTOLOAD.DWLand the Python server will all.pyand callAUTOLOAD.DWL.pyif exist.This feature make the following file:|/dwload_server/hooks/dynamic_dwl.py| general API to 'pyscript' files |
|/dwload_server/pyscripts/autoload_dwl.py| generates the DWLOAD menu       |on-the-fly converting ASCII BASIC listingThe server read/save ASCII BASIC listing and send/store them to the DWLOAD client on-the-fly.
So you can edit listings on your PC and try them on your Dragon without any external conventions!e.g.: save10 PRINT"HELLO WORLD!"
DLOAD"SAVE""HELLO.BAS"
DWLOAD
!
OKThe server will create two files:filenameformatdescriptionHELLO.DWLraw tokenized binaryDragon DOS Binary Format data from the Dragon (256 Bytes padded)HELLO.BASASCII listingon-the-fly converted ASCII BASIC listinge.g. load (and execute):DLOAD"HELLO.BAS"
!HELLO WORLD!
OK(Note: the first!is from DWLOAD ROM routine)The server will read theHELLO.BASASCII listing and convert is on-the-fly to the needed Dragon DOS Binary Format
and send this back to the Dragon.This feature make the following files:|/dwload_server/hooks/read_ascii.py| read ASCII listing and send as binary to client |
|/dwload_server/hooks/save_ascii.py| save binary from client as ASCII on server      |installationClone sources and bootstrap viadev-shell, e.g.:~$gitclonehttps://github.com/6809/DwLoadServer.git
~$cdDwLoadServer
~/DwLoadServer$./devshell.py

...

Developershell-DWLOADServer-v0.4.0


Documentedcommands(use'help -v'forverbose/'help <topic>'fordetails):

dev-shellcommands==================fix_code_stylepoetrypytesttox
list_venv_packagespublishpyupgradeupdate

DWLOADServerCommands======================runUncategorized=============aliashelphistorymacroquitsetshortcuts(dwload_server)run--help
Usage:run[-h][--root-dirROOT_DIR][--log-level{0,10,20,30,30,40,50,50,99,100}]{becker,serial}...

optionalarguments:-h,--helpshowthishelpmessageandexit--root-dirROOT_DIR--log-level{0,10,20,30,30,40,50,50,99,100}Logginglevel:10=DEBUG,20=INFO,30=WARNING,40=ERROR,50=CRITICAL/FATAL(default:20)Interface:{becker,serial}beckerUsetheBeckerinterfaceserialUsetheserialinterface(dwload_server)runserialYou can also run as cli, e.g.: Start serial DWLOAD server:~/DwLoadServer$./devshell.pyrunserialHistorydev...tbc...11.09.2022 - v0.5.0Modernize projectEasier bootstrap via dev-shell20.11.2014 - v0.4.0dynamicAUTOLOAD.DWLvia Python script19.11.2014 - v0.3.0Convert "ASCII BASIC listing" <-> "Dragon DOS Binary" on-the-fly while read/write17.11.2014 - v0.2.0Support Becker and Serial interface.14.11.2014 - v0.1.0 - Create bootstrap file that work under linux and windows.12.11.2014 - v0.0.1 - send a file works rudimentary30.09.2014 - Idea was born:Forum post 11893LinksForum Thread (en)worldofdragon.orgForum Thread (de)forum.classic-computing.dePyPihttps://pypi.python.org/pypi/dwload_server/Githubhttps://github.com/6809/DwLoadServersome project related links:About DWLOAD:http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4964DWEEBS application Thread:http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4968Dragon 32/64 DriveWire Adapter:http://archive.worldofdragon.org/index.php?title=Dragon_32/64_Drivewire_AdapterDrivewire for dummies:http://archive.worldofdragon.org/index.php?title=Drivewire_for_dummieshttp://sourceforge.net/p/drivewireserver/wiki/DriveWire_Specification/http://sourceforge.net/p/drivewireserver/wiki/