         INCLUDE   'blitz.i'
         INCLUDE   'lib/exec.i'
         INCLUDE   'lib/dos.i'
         INCLUDE   'exec/execbase.i'
         INCLUDE   'dos/dosextens.i'
         INCLUDE   'workbench/startup.i'

         libheader 208,Init,0,Exit,LibErrs

         acommand  long
            args
            libs
            subs   _wbmessage,0,0
         name      'wbmessage','- Returns location of WBStartup message'

         afunction long
            args
            libs
            subs   _WBArgs,0,0
         name      'WBArgs','- Returns the number of arguments passed by the Workbench'

         afunction string
            args   long
            libs   doslib,la6
            subs   _wArg,0,0
         name      'wArg','(Num) - Used to get WB args'

         acommand  long
            args   unknown
            libs   doslib,la6
            subs   _ReadArgs,0,0
         name      'ReadArgs','(Template) - Used to parse CLI args'

         afunction long
            args   long
            libs
            subs   _cArg,0,0
         name      'cArg','(Num) - Used to get CLI args'

Init:    nullsub   LibInit,0,0, execlib,la6
Exit:    nullsub   LibExit,0,0, execlib,la6, doslib,ld6

         libfin

_wbmessage:
         MOVE.L    WBMsg(pc),d0
         RTS

_WBArgs:
         MOVE.L    WBMsg(pc),d1
         BEQ       Oops
         MOVEA.L   d1,a0
         MOVE.L    sm_NumArgs(a0),d0
         RTS

_wArg:
         MOVE.L    WBMsg(pc),d1
         BEQ       Oops
         MOVEA.L   d1,a0
         MOVEA.L   sm_ArgList(a0),a0
1$       MOVE.L    wa_Lock(a0),d5
         MOVE.L    wa_Name(a0),d6
         ADDQ.L    #8,a0
         DBRA      d0,1$

         MOVE.L    d5,d1
         BEQ       Oops
         MOVE.L    a3,d2
         MOVE.L    #$FF,d3
         Call      NameFromLock

         MOVE.L    a3,-(sp)
2$       TST.B     (a3)+
         BNE       2$
         SUBQ.L    #1,a3

         CMPI.B    #":",-1(a3)
         BEQ       nd$                  ; wArg_NoDir
         MOVE.B    #"/",(a3)+

nd$      TST.L     d6
         BEQ       nn$
         MOVEA.L   d6,a0
3$       MOVE.B    (a0)+,(a3)+
         BNE       3$

         SUBQ.L    #1,a3
nn$      MOVE.L    a3,d0               ; wArg_NoName
         SUB.L     (sp)+,d0
         RTS

_ReadArgs:
         MOVE.L    ArgArray(pc),d2
         MOVE.L    d0,d1
         MOVEQ     #0,d3
         Call      ReadArgs
         MOVE.L    d0,CLIArg
         RTS

_cArg:
         MOVEA.L   ArgArray(pc),a0
         MULU.W    #4,d0
         MOVE.L    0(a0,d0.w),d0
         RTS

Oops:
         MOVEQ     #0,d0
         RTS

LibInit:
         MOVEA.L   ThisTask(a6),a2
         TST.L     pr_CLI(a2)
         BNE       1$                  ; FromCli
;         LEA      092(a2),a0
;         JSR      LVOWaitPort(a6)
         LEA       pr_MsgPort(a2),a0
         Call      GetMsg
         MOVE.L    d0,WBMsg
         RTS

1$       BAllocMem #256,#$10000,ArgArray
         RTS

LibExit:
         MOVE.L    WBMsg(pc),d0
         BEQ       CLI$
         MOVEA.L   d0,a1
         Call      Forbid
         Call      ReplyMsg
         RTS
CLI$     MOVE.L    CLIArg(pc),d1
         MOVE.L    a6,-(sp)
         MOVEA.L   d6,a6
         Call      FreeArgs
         MOVEA.L   (sp)+,a6
         RTS

WBMsg    Dc.l 0
CLIArg   Dc.l 0
ArgArray Dc.l 0

LibErrs
         Dc.b "$VER: Lotan's Args Library 0.2 (19.05.99)",0
         Even
