* WBArgumente by E.Hambuch DEMO
* Darf nicht veraendert werden !
* Nur zum Demonstrieren
* Informationen aus AMIGA 12/89
  include 'exec.i'
  include 'dos.i'
  include 'icon.i'
  include 'startup.i'
_main:
  lea dosname,a1         ;Dos-Library oeffnen
  CALLEXEC OldOpenLibrary
  move.l d0,_DOSBase
  beq ende
  tst.l _WBenchMsg      ;Von WB gestartet
  bne.s startwb         ;->JA
  CALLDOS Output        ;von CLI
  move.l d0,Out
  beq closedos
  lea clitext,a0
  bsr print
  bra closedos
startwb:
  lea iconname,a1      ;Icon-Library oeffnen
  jsr _LVOOldOpenLibrary(a6)
  move.l d0,_IconBase
  beq closedos
  move.l #window,d1    ;Fenster oeffnen
  move.l #MODE_NEWFILE,d2
  CALLDOS Open
  move.l d0,Out
  beq closeicon
  move.l _WBenchMsg,a0
  move.l $1c(a0),NumArgs   ;WBStartup.NumArgs  ;Anzahl der Argumente
  move.l $24(a0),ArgList   ;WBStartup.ArgList  ;Zeiger auf ArgumListe
  move.l NumArgs,d0        ;Zahl der Arg. ausgeben
  lea text1+21,a0
  bsr dez
  lea text1,a0
  bsr print
  moveq #0,d7
argloop:                   ;Argumente einzeln ausgeben
  move.l ArgList,a0
  move.w d7,d0
  lsl.w #3,d0
  move.l 4(a0,d0.w),a2    ;WBArguments->WBArg[Num].Name
  move.l 0(a0,d0.w),d4                            .Lock
  tst.b (a2)              ;String = $00
  bne.s arg1
  lea drawertxt,a0        ;Ja -> Drawer
  bsr print
  bra argl
arg1:                     ;ArgName ausgeben
  lea argtxt,a0
  bsr print
  move.l a2,a0
  bsr print
  lea rt,a0
  bsr print
  move.l d4,d1            ;aktuelles Directory setzen
  jsr _LVOCurrentDir(a6)
  move.l d0,oldlock
  move.l a2,a0
  CALLICON GetDiskObject  ;DiskObject holen
  move.l _DOSBase,a6
  move.l d0,diskobj
  beq closeout
  move.l d0,a4
  move.b 48(a4),d0   ;DiskObject.Type
  cmp.b #4,d0        ;PROJECT
  bne noproj
  move.l 50(a4),a0   ;DiskObject.DefaultTool
  cmp.l #0,a0        ;kein Defaulttool ?
  beq.s nodeft       ;Keins
  tst.b (a0)         ;kein DefTool ?
  beq.s nodeft       ;Keins
  move.l a0,a2
  lea defttxt,a0     ;DefTool vorhanden -> ausgeben
  bsr print
  move.l a2,a0
  bsr print
  lea rt,a0
  bsr print
nodeft:
noproj:
  move.l diskobj,a0
  move.l 54(a0),a4   ;DiskObject.ToolType
  cmp.l #0,a4
  beq nottype        ;kein ToolType
  lea toolttxt,a0
  bsr print
  move.l (a4),a0     ;erster Zeiger auf ToolType
  addq.l #4,a4
ttloop: move.l a0,a2
  lea spacetxt,a0
  bsr print
  move.l a2,a0
  bsr print
  lea rt,a0
  bsr print
  move.l (a4)+,a0   ;naester Zeiger auf String
  cmp.l #0,a0
  bne ttloop        ;keine ToolTypes mehr ?
  move.l diskobj,a0
  move.l 54(a0),a0  ;DiskObject.ToolTypes
  lea ToolType,a1
  CALLICON FindToolType ;ist dieser String (ToolType) darin enthalten
  move.l d0,d5
  beq.s notvorh           ;0 -> Nein
  move.l d5,a0
  lea ToolTypeInh,a1
  jsr _LVOMatchToolValue(a6)  ;Vergleichen
  tst.l d0
  beq.s notvorh    ;nicht vorhanden
  lea VorhandenTxt,a0
  bsr print
  bra.s nottype
notvorh:
  lea NichtVorTxt,a0
  bsr print
nottype:
  move.l diskobj,a0
  CALLICON FreeDiskObject  ;DiskObj freigeben
  move.l oldlock,d1
  CALLDOS CurrentDir
  move.l d0,oldlock
argl:
  addq.l #1,d7
  cmp.l NumArgs,d7       ;schon fertig ?
  bne argloop
closeout:                ;auf Return warten
  move.l Out,d1
  move.l #dosname,d2
  moveq #2,d3
  CALLDOS Read
  move.l Out,d1          ;alles schliessen
  jsr _LVOClose(a6)
closeicon:
  move.l _IconBase,a1
  CALLEXEC CloseLibrary
closedos:
  move.l _DOSBase,a1
  CALLEXEC CloseLibrary
ende: rts
print:                  ;Text ausgeben
  move.l a0,a1
l00: tst.b (a1)+
  bne.s l00
  suba.l a0,a1
  move.l Out,d1
  move.l a0,d2
  move.l a1,d3
  subq.l #1,d3
  move.l _DOSBase,a6
  jmp _LVOWrite(a6)
dez:                   ;Byte-Zahl in String
  divu #10,d0
  add.b #'0',d0
  move.b d0,(a0)+
  swap d0
  add.b #'0',d0
  move.b d0,(a0)
  rts
dosname: DOSNAME
iconname: ICONNAME
_DOSBase:   dc.l 0
_IconBase:  dc.l 0
Out:       dc.l 0
NumArgs:   dc.l 0
ArgList:   dc.l 0
oldlock:   dc.l 0
diskobj:   dc.l 0
clitext: dc.b 'Bitte von Workbench starten !',10,0
window: dc.b 'CON:0/0/640/256/WBArguments-Demo  Written by E.Hambuch',0
text1: dc.b 'Anzahl der Argumente:   ',10,0
drawertxt: dc.b 'Bitte keine Drawer,Garbage oder Disks',10,0
rt: dc.b 10,0
argtxt: dc.b   'Argument: ',0
defttxt: dc.b  '     DefaultTool = ',0
toolttxt: dc.b '     ToolTypes = ',10,0
spacetxt: dc.b '         ',0
ToolType: dc.b 'TOOLTYPE',0
ToolTypeInh: dc.b 'DUMMY',0
VorhandenTxt: dc.b '     Parameter "DUMMY" ist vorhanden !',10,0
NichtVorTxt: dc.b '     Parameter "DUMMY" nicht vorhanden !',10,0
  end
