home *** CD-ROM | disk | FTP | other *** search
- ; *
- ; * Library-Modul "arg"
- ; *
- ; * Parameter: auf Stack liegen Länge und Adresse des Parameters
- ; *
- ; * Diese Routine erzeugt einen passenden Argument-Vector und
- ; * ruft dann mit den entsprechenden Argumenten "main_iPPc" auf.
- ; *
- ; * Jens Gelhar 06.11.92/31.08.93/23.11.93
- ; *
-
- xdef main_
- xref main__iPPc
-
- ExecBase = 4
-
- main_:
- move.l a7,a5
- movem.l 4(a7),d0/a0
- move.l d0,d1
- addq.l #4,d1
- and.w #$FFFC,d1
- sub.l d1,a7
- move.l a7,a1
- move.w d0,d2
- beq.b copied
- copy move.b (a0)+,(a1)+
- subq.w #1,d2
- bne.b copy
- subq.l #1,a1
- copied move.l a7,a0 ; Stringanfang
- clr.l -(a7) ; Nullpointer ans Listenende
- moveq #1,d1
- cmp.l a0,a1
- beq.b done
- bra.b clear ; Null ans Ende und gleich nachfolgende Spaces überlesen
-
- count cmp.l a0,a1
- blo.b first
- cmp.b #'"',(a1)
- beq.b cnqu
- cmp.b #"'",(a1)
- bne.b normstr
- cnqu ; evtl. Parameter mit "...":
- move.l a1,a2
- quotstr cmp.l a0,a2
- bls.b normstr ; doch nicht...
- move.b -(a2),d0
- cmp.b (a1),d0
- bne.b quotstr
- cmp.l a0,a2
- beq.b quoted
- cmp.b #' ',-1(a2)
- bhi.b normstr
- quoted ; Yow:
- clr.b (a1) ; abschließendes " löschen
- move.l a2,a1
- bra.b word
- normstr ; Parameter ohne "..."
- cmp.l a0,a1
- bls.b first
- cmp.b #' ',-(a1)
- bhi.b normstr
- word ; Wortzwischenraum gefunden:
- pea 1(a1)
- addq.l #1,d1
- cmp.l a0,a1
- bls.b done
- clear ; Wortzwischenraum ganz löschen:
- clr.b (a1)
- subq.l #1,a1
- cmp.l a0,a1
- bls.b count
- cmp.b #' ',(a1)
- bls.b clear
- bra.b count
- first addq.l #1,d1
- move.l a1,-(a7) ; erster String
- ; d1 Zeiger liegen nun auf dem Stack
- done
- clr.l -(a7) ; Platz für Programmnamen freihalten
- move.l a7,-(a7)
- move.l d1,-(a7)
- ; Programmnamen ermitteln:
- move.l ExecBase.w,a6
- move.l $114(a6),a0 ; ThisTask
- move.l 172(a0),d0 ; BCPL-Zeiger auf CLI
- beq.b workb
- asl.l #2,d0
- move.l d0,a0
- move.l 16(a0),d0 ; BCPL-Stringzeiger
- beq.b Nameless
- asl.l #2,d0
- move.l d0,a0
- moveq #0,d1
- move.b (a0)+,d1 ; Länge nach d1
- beq.b Nameless
- clr.b 0(a0,d1)
- bra.b ThisName
- workb ; Workbench-Start: Programmnamen nicht selbst ermitteln
- addq.l #4,4(a7)
- subq.l #1,(a7)
- bra.b call
- Nameless lea defaultname(pc),a0
- ThisName move.l a0,8(a7)
-
- call jsr main__iPPc
-
- move.l a5,a7
- rts
-
- defaultname dc.b '?',0
-
- end
-
-