Fastlynx can do serial, lpt, and network (over ipx) xfers between vintage computers, and can do local file management. Could fit on a 360k floppy with some prodding. Could 'bootstrap itself' to a remote system that has ctty, for when you don't have a diskette drive on your victim pc.
So, YES.
Has a splitscreen mode, midnight-commander like interface.
... Could fit on a 360k floppy with some prodding ...
Must be pretty big - DDLINK at 18k can fit on a 360k with lots of other stuff, no "prodding" needed.
The whole idea in its design was to take as little space as possible on a disk already full of other tools.
... Could 'bootstrap itself' to a remote system that has ctty, for when you don't have a diskette drive on your victim pc ..
This the first time I've heard of a similar tool which could do this! - DDLINK has had the ability to bootstrap itself over a serial connection since day one, but I've not seen this ability elsewhere (Even though an ImageDisk system is guaranteed to have "a floppy " ... it might not be a "normal" one (could be an 8" drive - and no guarantee that other/newer systems you might want to move things from have a floppy) - This was a "fun" develp[ment.
I used DDLINK to put stuff on a Poqet PC I got last year - no interface cables, internal drive batteries were dead so not easy to put stuff (incl DDLINK) onto it - fortunately I found pinout for expansion connector and was able to make a serial csble ... bootstrap DDLINK and go from there)
This was a dead-slow 8088 based machine, couldn't do DOS serial at more than about 2400 ... putting something big on would have been painful.
(assuming it would have run on an 8088)
Also *does* run on 8088s, and can work on MDA displays.
As for its *size*, it was the 'FX.CMD' file that was the whale. It's not needed to operate at all, it's the help file. Omitting it from the diskette was my standard practice.
Good to hear it works on 8088 - so many good things don't anymore.
The documentation for DDLINK is a separate 1050line/42k DDLINK.TXT which obviously isn't needed after you get a bit used to it. I also go out of my way to make the prompts along the bottom line show the key you use to activate a function:
Once acivated a function will menu-prompt for any extra information it needs/
It also has some help users might need "on the go" built in, things like Command line, diagrams if you need to make a Comm or Lpt cable, and Keycodes for automated operation. The idea is that you only need to DDLINK.COM (and a packet driver if you are using network)
1C:\>ddlink -? 2DavesDataLINK - move/manipulate files via: serial, parallel or network 3 4Use: DDLINK options 5 6opts: /B[speed] Bootstrap remote (via com) [9600] 7 /M force Monochrome video 8 /S Server mode 9 P=[ii][,tttt] specify Packet int,type [60-80,DD11] 10 C=1-4[,speed] specify Com port ?C for [none,115200] 11 L=1-3|addr specify Lpt port ?L more [none] 12 K=keys automate Keycodes ?K help [none] 13 B=128-4096 specify Blocksize [1024] 14 T=factor specify Timeout factor [6] 15 E=1-255 cause server to End (errorlevel) [none] 16 Server causes end AFTER one session \ useful in 17 Client "" "" immediately / automated scripts 18 V=n override protocol Version [none] 19 may let different versions perform basic transfers (other feature 20 limitations) useful to update one system from another. 21 22Start SERVER (/S) before CLIENT (no /S) [interaction is on CLIENT] 23 24Dave Dunfield - https://dunfield.themindfactory.comDDLINK requires a "null modem" serial cable: 25C:\>ddlink -? 26 DB9-DB9 DB25-DB25 DB9-DB25 27 ----------------------------------------------- 28 GND 5-5 7-7 5-7 GND \ 29 RXD 2-3 3-2 2-2 TXD > Always 30 TXD 3-2 2-3 3-3 RXD / 31 DTR 4-6 20-6 4-6 DSR \ 32 DSR 6-4 6-20 6-20 DTR > DOS also needs 33 RTS 7-8 4-5 7-5 CTS > (for /B only) 34 CTS 8-7 5-4 8-4 RTS / 35 36 DDLINK uses the HARDWARE assignments for COM1-COM4: 37 COM# Addr IRQ 38 1 03F8 4 39 2 02F8 3 40 3 03E8 4 41 4 02E8 3 42C:\>ddlink -?L 43DDLINK requires a "bidirectional data-transfer" parallel cable: 44 45 DB25-DB25 46 --------------------------- 47 GND 25-25 GND 48 D0 2-15 ERROR \ 49 D1 3-13 SLCT > Must be wired 50 D2 4-12 PE > between BOTH 51 D3 5-10 ACK > ends (two wires) 52 D4 6-11 BUSY / 53C:\>ddlink -?K 54K= codes: 55 56 Any ASCII character ( use ~~ for single ~ ) 57 ~u Up ~U pgUp ~N eNter 58 ~d Down ~D pgDn ~_ Space 59 ~l Left ~h Home 60 ~r Right ~e End ~E Escape
This help is actually stored at the end (after code and used data) of the .COM file, and can be removed (if you really need <18k) and the program still works.
It auto-detects color or mono (but you can force mono)
We could continue comparing them all day - lets just agree that they are both fairly decent/usable programs.
Yeah, there are differences - everyone "thinks differently" which really shows up on software UI design. (One of the main reasons I've alwaus been kinda anal about writing most of tools I use daily)
Lookiong at your screenshot, I note it lists COM1 and COM2 on the local side, and only COM1 or the remote - perhaps you were using it with systems that only had 2/1 COM ports... It can't know whats available on the remote end yet.. Which raises a question, does FastLynx work with all 4 possible COM ports (on either end and during bootstrap)?
Also curious to know how it bootstraps and if it works in FreeDos? I start with "copy COMx: DDLINK.COM" then send a very small bootloader, then runs it to transfer the actual image. This relies on COPY being "mostly binary" and works well in MS-DOS and PC-DOS but didn't work in FreeDos - I ended up rewriting the bootloader to XOR encode/decode, avoid some characters that FreeDos didn't transfer!
The other way I sometime bootstrap over serial is by "typing" the bootloader code intp DEBUG and running it - this relies on DEBUG being present and exactly the same interface... My DDLB tool which does this has some options to let you configure how it interfaces with DEBUG.
Alao, I'd forgotten, one of the recent improvements I made to DDLINK was to give it full context-menu help. I did this by adding DDLHLP.EXE (12k) which DDLINK chains to if it's present. If it's NOT present, DDLINK doesn't offer the '?' help key.
In a batch file, is there a way of checking if an error has happened via a command? I’m trying to get FASTVID to initialise before Quake loads. However, if it fails with a ‘bad command or filename error’, it considers the check to be true and won’t bother running it again if I try.
OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670
"IF ERRORLEVEL 1 CODE" will execute CODE if the last command returned at least 1. Prepending NOT to ERRORLEVEL executes CODE if <1. If you want the error to be exactly 1, try "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 CODE". For errors between 1 and 3, use "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 4 CODE". I don't know what error number is returned if an illegal command or filename is encountered, though. Maybe 255? If a particular program is giving you that error, try copying the program to C:\DOS or adding its path to the PATH statement in AUTOEXEC.BAT. If you do the latter, each path is to be separated by a semicolon.
Joseph Rose, a.k.a. Harry Potter
Working magic in the computer community
In a batch file, is there a way of checking if an error has happened via a command? I’m trying to get FASTVID to initialise before Quake loads. However, if it fails with a ‘bad command or filename error’, it considers the check to be true and won’t bother running it again if I try.
Bad command or filename seems to indicate the file or path doesn’t exist rather than FASTVID exiting
I’m curious what circumstances lead to the filename being invalid, however if that is the case you can do an IF EXISTS C:\PATH\TO\FASTVID.EXE to check if the filename/path is valid before running a command
98/DOS Rig: BabyAT AladdinV, K6-2+/550, V3 2000, 128MB PC100, 20GB HDD, 128GB SD2IDE, SB Live!, SB16-SCSI, PicoGUS, WP32 McCake, iNFRA CD, ZIP100
XP Rig: Lian Li PC-10 ATX, Gigabyte X38-DQ6, Core2Duo E6850, ATi HD5870, 2GB DDR2, 2TB HDD, X-Fi XtremeGamer
"IF ERRORLEVEL 1 CODE" will execute CODE if the last command returned at least 1. Prepending NOT to ERRORLEVEL executes CODE if <1. If you want the error to be exactly 1, try "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 CODE". For errors between 1 and 3, use "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 4 CODE". I don't know what error number is returned if an illegal command or filename is encountered, though. Maybe 255? If a particular program is giving you that error, try copying the program to C:\DOS or adding its path to the PATH statement in AUTOEXEC.BAT. If you do the latter, each path is to be separated by a semicolon.
Yeesh. That's a lot to take in and process. ^^; I'm not sure what the error code would be in this case. But it's currently running from C:\DOSPRO\FASTVID. I've had the path statement added in the autoexec file and initiated in a particular DOS boot option. I've managed to get it working correctly now, but adding a command that checks if it gives an error would be useful, if possible.
OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670
The simple answer is "if errorlevel ...." can be used to make .... conditional on the exit status of the last comamnd.
But... this can be tricky for newbies in DOS batch files. The tricky part is that it really means "if errorlevel >= x" ... so if you are doing commands on certain exit codes the commands will be performed on any higher exit code. This causes problems for things like GOTO - you have to test them in REVERSE order.
1if errorlevel 1 goto x1 2if errorlevel 2 goto x2
Is WRONG - it will always GOTO x1 if the exit code is 1 or HIGHER (you need to test higher ones first)
Here is a little .BAT file I wrote to show how it works (note: ERRLVL is a command of mine - see followind description :
Note that testing ERRORLEVEL 0 makes no sense as that command will ALWAYS run (errorlevel can't be <0)
It is also important to realize that ERRORLEVEL is specifically set by programs when they terminate, and not all bother to set it. You should test whatever you are planning to use to confirm if/how it sets errorlevel!
1ErRoR LeVeL test 2 3use: ERRLVL [options] value(0-255) [1] 4 "" "" program_file [arguments] [2] 5opts: -Q Quiet (less output) 6 -Maddress write exit-code to Memory at address 7 -Bfilename "" to Binary file \ Mutually 8 -T"" "" Text file > exclusive 9 -Ccommand execute Command (with exit-code) / (only one) 10[1] Exits with the specified exit-code value (ERRORLEVEL) 11[2] runs a program and reports it's exit-code 12 may optionally write that exit-code to: Memory or File 13 or execute a command with it in args. 14if program_file does not exist in current directory, ERRLVL will search along 15 your PATH. 16If program_file has no extension, ERRLVL will try: .BAT .COM and .EXE 17 18address assumes hex \_ available : %=binary $=hex 19value assumes decimal/~ base prefix: @=octal .=Decimal 20-Ccommand may: '~_'=' ' '~('='<' '~~'='~' '~%@$.'=exit-code 21 contain : '~!'='|' '~)'='>' (%binary/@octal/$hex/.decimal) 22 23Dave Dunfield - https://dunfield.themindfactory.com
Last edited by DaveDDS on 2026-02-26, 23:08. Edited 1 time in total.
In a batch file, is there a way of checking if an error has happened via a command? I’m trying to get FASTVID to initialise before Quake loads. However, if it fails with a ‘bad command or filename error’, it considers the check to be true and won’t bother running it again if I try.
Bad command or filename seems to indicate the file or path doesn’t exist rather than FASTVID exiting
I’m curious what circumstances lead to the filename being invalid, however if that is the case you can do an IF EXISTS C:\PATH\TO\FASTVID.EXE to check if the filename/path is valid before running a command
Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to really spell it out for it to initiate. Something like:
C:
CD C:\DOSPRO\FASTVID
FASTVID 111 -128 d0000000
CD\
That's more or less how I had it in the autoexec.bat and in my game's custom BAT file.
OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670
... I’m curious what circumstances lead to the filename being invalid ...
Some quick reasons come to mind: Contains characters not allowed in filenames. Longer than 8.3 in systems not supporting long filenames. I'm sure there are more reasons.
... Bad command or filename seems to indicate the file or path doesn’t exist ...
I think he wants to know within a .BAT file, not on screen.
Somewhere I have a tool I wrote to deal with programs not setting errorlevel and DosBox not being able to redirect stderr; that runs a command and searches for certain strings of text in on-screen output after running it ... and returns an exit code indicating which (if any) strings occurred. If anyone wants, I could probably dig it up.
DustyShinigamiwrote on Yesterday, 22:57:Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to […] Show full quote
Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to really spell it out for it to initiate. Something like:
C:
CD C:\DOSPRO\FASTVID
FASTVID 111 -128 d0000000
CD\
That's more or less how I had it in the autoexec.bat and in my game's custom BAT file.
Not so much that it's picky but in DOS many situations are contextual, for example if the working directory changes in a batch file it can cause some applications not to work correctly. Those need to be taken into account when working in batch scripts. Explicitly changing the working directory before running a program is the safest way to make it work, but then you are changing back to CD\ or the root folder, I think quake doesn't care but some other apps may have an issue with it unless the batch file does another CD back to the game directory.
98/DOS Rig: BabyAT AladdinV, K6-2+/550, V3 2000, 128MB PC100, 20GB HDD, 128GB SD2IDE, SB Live!, SB16-SCSI, PicoGUS, WP32 McCake, iNFRA CD, ZIP100
XP Rig: Lian Li PC-10 ATX, Gigabyte X38-DQ6, Core2Duo E6850, ATi HD5870, 2GB DDR2, 2TB HDD, X-Fi XtremeGamer
DustyShinigamiwrote on Yesterday, 22:57:Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to […] Show full quote
Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to really spell it out for it to initiate. Something like:
C:
CD C:\DOSPRO\FASTVID
FASTVID 111 -128 d0000000
CD\
That's more or less how I had it in the autoexec.bat and in my game's custom BAT file.
Not so much that it's picky but in DOS many situations are contextual, for example if the working directory changes in a batch file it can cause some applications not to work correctly. Those need to be taken into account when working in batch scripts. Explicitly changing the working directory before running a program is the safest way to make it work, but then you are changing back to CD\ or the root folder, I think quake doesn't care but some other apps may have an issue with it unless the batch file does another CD back to the game directory.
I see. It just seems a bit out of the ordinary when usually I’ve put something like:
C:\DOSPRO\APP\PROGRAM.EXE /SWITCH
…and it works. Or, I’ve set the directory at the start, then added it like:
%PROGRAMLOCATION%\PROGRAM.EXE
OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670
DaveDDSwrote on Yesterday, 22:54:The simple answer is "if errorlevel ...." can be used to make .... conditional on the exit status of the last comamnd. […] Show full quote
The simple answer is "if errorlevel ...." can be used to make .... conditional on the exit status of the last comamnd.
But... this can be tricky for newbies in DOS batch files. The tricky part is that it really means "if errorlevel >= x" ... so if you are doing commands on certain exit codes the commands will be performed on any higher exit code. This causes problems for things like GOTO - you have to test them in REVERSE order.
1if errorlevel 1 goto x1 2if errorlevel 2 goto x2
Is WRONG - it will always GOTO x1 if the exit code is 1 or HIGHER (you need to test higher ones first)
Here is a little .BAT file I wrote to show how it works (note: ERRLVL is a command of mine - see followind description :
Note that testing ERRORLEVEL 0 makes no sense as that command will ALWAYS run (errorlevel can't be <0)
It is also important to realize that ERRORLEVEL is specifically set by programs when they terminate, and not all bother to set it. You should test whatever you are planning to use to confirm if/how it sets errorlevel!
1ErRoR LeVeL test 2 3use: ERRLVL [options] value(0-255) [1] 4 "" "" program_file [arguments] [2] 5opts: -Q Quiet (less output) 6 -Maddress write exit-code to Memory at address 7 -Bfilename "" to Binary file \ Mutually 8 -T"" "" Text file > exclusive 9 -Ccommand execute Command (with exit-code) / (only one) 10[1] Exits with the specified exit-code value (ERRORLEVEL) 11[2] runs a program and reports it's exit-code 12 may optionally write that exit-code to: Memory or File 13 or execute a command with it in args. 14if program_file does not exist in current directory, ERRLVL will search along 15 your PATH. 16If program_file has no extension, ERRLVL will try: .BAT .COM and .EXE 17 18address assumes hex \_ available : %=binary $=hex 19value assumes decimal/~ base prefix: @=octal .=Decimal 20-Ccommand may: '~_'=' ' '~('='<' '~~'='~' '~%@$.'=exit-code 21 contain : '~!'='|' '~)'='>' (%binary/@octal/$hex/.decimal) 22 23Dave Dunfield - https://dunfield.themindfactory.com
Wow, this is... heavy, heh. I would have to put all this into practise. Looks confusing and complicated. ^^; But thanks for taking the time out to do this. I just wish I understood it.
OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670
Wow, this is... heavy, ... Looks confusing and complicated.
It's not that complicated, just a couple things you need to remember:
1) if ERRORLEVEL n
Means the last exit code was EQUAL to or HIGHER than n
This basically means you often has to test in reverse order, which is unnatural enough that it sometimes "catches" more experienced users: Re: MS-DOS autostart CD without getting Abort-Retry-Fail
2) The exit code (errorlevel) is set by the program, and is not overly standardized or enforced.
Most programming languages will exit with 0 (success) if you just terminate (or worse, a random exit code) - You have to explicitly set the exit code when you exit, and a lot of people don't bother and just get whatever their programming language gives.
Exit codes are by far the easiest way to send a small nugget of information back to a calling program (which may be a batch file) - so I personally tend to use this feature a lot as many of my tools can invoke others
Last edited by DaveDDS on 2026-02-27, 13:39. Edited 1 time in total.
Wow, this is... heavy, ... Looks confusing and complicated.
It's not that complicated, just a couple things you need to remember:
1) if ERRORLEVEL n
Means the last exit code was EQUAK to or HIGHER than n
This basically means you often has to test in reverse order, which is unnatural enough that it sometimes "catches" more experienced users: Re: MS-DOS autostart CD without getting Abort-Retry-Fail
2) The exit code (errorlevel) is set by the program, and is not overly standardized or enforced.
Most programming languages will exit with 0 (success) if you just terminate (or worse, a random exit code) - You have to explicitly set the exit code when you exit, and a lot of people don't bother and just get whatever their programming language gives.
Exit codes are by far the easiest way to send a small nugget of information back to a calling program (which may be a batch file) - so I personally tend to use this feature a lot as many of my tools can invoke others
That thread you've linked to, about autostarting a CD without abort, retry, or fail, will be a good one for me to practise with. That can happen to me a bit as well. Usually when I set CDBQ for a game, I'm not sure if it's because my CD drive is too fast for it to keep up, but often it'll act like there is no CD present, and gives me the abort, retry, and fail error. Usually I've had to get it to load up the root of the CD in order to get it to recognise it properly. Like this: