home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / arg.asm < prev    next >
Encoding:
Assembly Source File  |  1993-11-23  |  2.2 KB  |  116 lines

  1.     ; *
  2.     ; * Library-Modul "arg"
  3.     ; *
  4.     ; * Parameter: auf Stack liegen Länge und Adresse des Parameters
  5.     ; *
  6.     ; * Diese Routine erzeugt einen passenden Argument-Vector und
  7.     ; * ruft dann mit den entsprechenden Argumenten "main_iPPc" auf.
  8.     ; *
  9.     ; * Jens Gelhar 06.11.92/31.08.93/23.11.93
  10.     ; *
  11.  
  12.     xdef    main_
  13.     xref    main__iPPc
  14.  
  15. ExecBase    = 4
  16.  
  17. main_:
  18.     move.l a7,a5
  19.     movem.l 4(a7),d0/a0
  20.     move.l d0,d1
  21.     addq.l #4,d1
  22.     and.w #$FFFC,d1
  23.     sub.l d1,a7
  24.     move.l a7,a1
  25.     move.w d0,d2
  26.     beq.b copied
  27. copy    move.b (a0)+,(a1)+
  28.     subq.w #1,d2
  29.     bne.b copy
  30.     subq.l #1,a1
  31. copied    move.l a7,a0            ; Stringanfang
  32.     clr.l -(a7)             ; Nullpointer ans Listenende
  33.     moveq #1,d1
  34.     cmp.l a0,a1
  35.     beq.b done
  36.     bra.b clear             ; Null ans Ende und gleich nachfolgende Spaces überlesen
  37.  
  38. count    cmp.l a0,a1
  39.     blo.b first
  40.     cmp.b #'"',(a1)
  41.     beq.b cnqu
  42.     cmp.b #"'",(a1)
  43.     bne.b normstr
  44. cnqu    ; evtl. Parameter mit "...":
  45.     move.l a1,a2
  46. quotstr    cmp.l a0,a2
  47.     bls.b normstr     ; doch nicht...
  48.     move.b -(a2),d0
  49.     cmp.b (a1),d0
  50.     bne.b quotstr
  51.     cmp.l a0,a2
  52.     beq.b quoted
  53.     cmp.b #' ',-1(a2)
  54.     bhi.b normstr
  55. quoted    ; Yow:
  56.     clr.b (a1)              ; abschließendes " löschen
  57.     move.l a2,a1
  58.     bra.b word
  59. normstr    ; Parameter ohne "..."
  60.     cmp.l a0,a1
  61.     bls.b first
  62.     cmp.b #' ',-(a1)
  63.     bhi.b normstr
  64. word    ; Wortzwischenraum gefunden:
  65.     pea 1(a1)
  66.     addq.l #1,d1
  67.     cmp.l a0,a1
  68.     bls.b done
  69. clear    ; Wortzwischenraum ganz löschen:
  70.     clr.b (a1)
  71.     subq.l #1,a1
  72.     cmp.l a0,a1
  73.     bls.b count
  74.     cmp.b #' ',(a1)
  75.     bls.b clear
  76.     bra.b count
  77. first    addq.l #1,d1
  78.     move.l a1,-(a7)         ; erster String
  79.     ; d1 Zeiger liegen nun auf dem Stack
  80. done
  81.     clr.l -(a7)             ; Platz für Programmnamen freihalten
  82.     move.l a7,-(a7)
  83.     move.l d1,-(a7)
  84.     ; Programmnamen ermitteln:
  85.     move.l ExecBase.w,a6
  86.     move.l    $114(a6),a0      ; ThisTask
  87.     move.l 172(a0),d0               ; BCPL-Zeiger auf CLI
  88.     beq.b workb
  89.     asl.l #2,d0
  90.     move.l d0,a0
  91.     move.l 16(a0),d0                ; BCPL-Stringzeiger
  92.     beq.b Nameless
  93.     asl.l #2,d0
  94.     move.l d0,a0
  95.     moveq #0,d1
  96.     move.b (a0)+,d1                 ; Länge nach d1
  97.     beq.b Nameless
  98.     clr.b 0(a0,d1)
  99.     bra.b ThisName
  100. workb    ; Workbench-Start: Programmnamen nicht selbst ermitteln
  101.     addq.l #4,4(a7)
  102.     subq.l #1,(a7)
  103.     bra.b call
  104. Nameless    lea defaultname(pc),a0
  105. ThisName    move.l a0,8(a7)
  106.  
  107. call    jsr main__iPPc
  108.  
  109.     move.l a5,a7
  110.     rts
  111.  
  112. defaultname    dc.b '?',0
  113.  
  114.     end
  115.  
  116.