This first example works with any AmigaDOS.
The first thing that is done is the assignment of wbmessage
to a correctly typed pointer.
At the same time we can check to see if it is NIL
(i.e., whether the program was started from Workbench or not).
If it was not started from Workbench the arguments in arg
are printed.
Otherwise we need to use the fact that wbmessage
is really a pointer to a wbstartup
object (defined in module `workbench/startup'), so we can get at the argument list.
Then for each argument in the list we need to check the lock supplied with the argument.
If it's a proper lock it will be a lock on the directory containing the argument file.
The name in the argument is just a filename, not a complete path, so to read the file we need to change the current directory to the lock directory.
Once we've got a valid lock and we've changed directory to there, we can find the length of the file (using FileLength
) and print it.
If there was no lock or the file did not exist, the name of the file and an appropriate error message is printed.
MODULE 'workbench/startup' PROC main() DEF startup:PTR TO wbstartup, args:PTR TO wbarg, i, oldlock, len IF (startup:=wbmessage)=NIL WriteF('Started from Shell/CLI\n Arguments: "\s"\n', arg) ELSE WriteF('Started from Workbench\n') args:=startup.arglist FOR i:=1 TO startup.numargs /* Loop through the arguments */ IF args[].lock=NIL WriteF(' Argument \d: "\s" (no lock)\n', i, args[].name) ELSE oldlock:=CurrentDir(args[].lock) len:=FileLength(args[].name) /* Do something with file */ IF len=-1 WriteF(' Argument \d: "\s" (file does not exist)\n', i, args[].name) ELSE WriteF(' Argument \d: "\s", file length is \d bytes\n', i, args[].name, len) ENDIF CurrentDir(oldlock) /* Important: restore current dir */ ENDIF args++ ENDFOR ENDIF ENDPROC
When you run this program you'll notice a slight difference between arg
and the Workbench message: arg
does not contain the program name, just the arguments, whereas the first argument in the Workbench argument list is the program.
You can simply ignore the first Workbench argument in the list if you want.
Go to the Next or Previous section, the Detailed Contents, or the Amiga E Encyclopedia.