;MOUNTED Copyright 1987 Bryce Nesbitt.   Revokable licence hereby granted for
;any entity to use or absue this code in any way they see fit provided that
;such entity, in the judgement of the author:
;1> Retains this and any other Copyright notices.
;2> Is paid up on any monetary imbalance with author.
;3> Does not have unjustified litigation pending against author.
;Please tell me about any enhacements,changes,bugs or brain-damage in this
;code.   bryce@hoser.berkeley.EDU -or- bryce@cogsci.berkeley.EDU
;Bryce Nesbitt 1712 Marin Ave.   Berkeley, Ca 94707-2206
;Some inspirational assistence by Peter da Silva.
;
;FUNCTION:
;  MOUNTED can determind if a volume or file is on-line.  It may be used
;for conditional execution in a command file.  If returns OK if the path
;is present, or WARN if it is not.  It does the test "quietly" without
;bringing up a requester.
;
;FAIL  means serious error, like no DOS or memory
;ERROR is less fatal, maybe syntax or "file not found" for a TYPE command.
;WARN  is used for things like "file not found" on a DELETE or here in
;      MOUNTED.  Also used by TYPE when <CTRL><C> is hit.
;
;EXAMPLE:
; mounted assem:c
; if not warn
;  echo #27 "[43m"
;  path assem:c
; endif
;
;BUGS:
;  Because I use the parser code from the ARP.LIBRARY, which I cannot yet
;distribute, no parsing of the line is done.  The entire input line will be
;used, spaces, quotes and all.
;  It would be nice to be able to determine if a physical device such as
;DF0: is present.  As it stands MOUNTED will return a WARN if a connected
;drive is present, but empty.  There are better ways of attaining this
;function than adding a kludge to MOUNTED.
;  The executable is 152 bytes long when assembled with METACOMCO 10.178
;and linked using BLINK 6.5 with the NODEBUG option enabled.

***********************

_LVOFindTask equ -$126
_LVOOldOpenLibrary equ -$198
_LVOCloseLibrary equ -$19e

_LVOLock equ -$54
_LVOUnLock equ -$5a

ACCESS_READ equ -2

pr_WindowPtr equ $b8

jsrlib   MACRO
   jsr   _LVO\1(a6)
   ENDM

jmplib   macro
   jmp   _LVO\1(a6)
   ENDM

blink   MACRO
   bchg.b   #1,$bfe001
   ENDM

***********************
DOSBase    equr a5
MyProcess   equr a4
LinePointer   equr a3
returncode   equr d7
WindowSave   equr d6

      CODE
startup:   clr.b   -1(a0,d0)   ;cheap way to NULL terminate
      moveq   #5,returncode   ;default WARN condition
      move.l   a0,LinePointer

      move.l   4,a6
      lea   DOSName(pc),a1
      jsrlib   OldOpenLibrary   ;V1.0 Compatible
      move.l   d0,DOSBase   ;Look ma, no error check!
      suba.l   a1,a1
      jsrlib   FindTask   ;Process, really
      move.l   d0,MyProcess
;-- Report errors "quietly" --
      move.l   pr_WindowPtr(MyProcess),WindowSave
      moveq   #-1,d0
      move.l   d0,pr_WindowPtr(MyProcess)
;-- Attempt lock --
      move.l   LinePointer,d1
      moveq   #ACCESS_READ,d2
      move.l   DOSBase,a6
      jsrlib   Lock      ;Attempt lock
      tst.l   d0
      beq.s   NoLock      ;Can't find it, exit code 10
      move.l   d0,d1
      jsrlib   UnLock
      moveq   #0,returncode   ;It's there, return zero
;-- Restore environment / "noisy" errors --
NoLock:    move.l   WindowSave,pr_WindowPtr(MyProcess)
      move.l   DOSBase,a1
      move.l   4,a6
      jsrlib   CloseLibrary
      move.l   returncode,d0
      rts
DOSName:   dc.b   'dos.library',0
      dc.b   '(C)1987 Bryce Nesbitt'
      END
