home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / getenv.asm < prev    next >
Encoding:
Assembly Source File  |  1994-09-28  |  1.3 KB  |  80 lines

  1.  
  2. * Maxon C++ Library:
  3. * Modul "GetEnv"
  4. * Jens Gelhar 28.01.92, 08.04.94, 20.09.94
  5.  
  6.     xdef    _getenv,getenv__PCc
  7.  
  8.     xref    _DosBase,malloc__Ui
  9.  
  10. GetVar    = -906
  11.  
  12. _getenv:
  13. getenv__PCc:
  14.     movem.l    d1-d7/a0-a2/a6,-(a7)
  15.     move.l    a7,a2
  16.     move.l    _DosBase,a6
  17.     cmp.w    #36,20(a6)        ; mindestens V36
  18.     blt    fail
  19.     moveq    #32,d6            ; Buffer-Größe
  20.     sub.l    d6,a7
  21. try    move.l    11*4+4(a2),d1        ; Name
  22.     move.l    a7,d2            ; Buffer
  23.     move.l    d6,d3            ; Size
  24.     moveq    #0,d4            ; Flags
  25.     jsr    GetVar(a6)
  26.     tst.l    d0
  27.     bmi.b    fail
  28.     addq.l    #1,d0            ; Nullbyte gehört dazu!
  29.     cmp.l    d6,d0
  30.     blo.b    found
  31.     ; nochmal mir größerem Buffer versuchen:
  32.     sub.l    d6,a7
  33.     add.l    d6,d6
  34.     bra.b    try
  35. found    ; Wert mit Länge d0 liegt auf Stack
  36.     move.l    11*4+4(a2),a1        ; Name
  37.     move.l    VarList,a0
  38. find    ; Prüfen, ob Wert schon in Liste:
  39.     cmp.w    #0,a0
  40.     beq.b    new
  41.     cmp.l    4(a0),d1
  42.     bne.b    next
  43.     cmp.l    8(a0),d0
  44.     beq.b    here
  45. next    move.l    (a0),a0
  46.     bra.b    find
  47. new    movem.l    d0/d1,-(a7)
  48.     add.l    #14,d0
  49.     move.l    d0,-(a7)
  50.     jsr    malloc__Ui
  51.     addq.l    #4,a7
  52.     move.l    d0,a0
  53.     movem.l    (a7)+,d0/d1
  54.     cmp.w    #0,a0
  55.     beq.b    fail
  56.     move.l    VarList,(a0)
  57.     move.l    a0,VarList
  58. here    ; d0/d1 bei a0 einfügen:
  59.     move.l    d1,4(a0)
  60.     move.l    d0,8(a0)
  61.     lea    12(a0),a0
  62.     move.l    a0,d0
  63.     move.l    a7,a1
  64.     subq.l    #1,d2
  65. copy    move.b    (a1)+,(a0)+
  66.     dbeq.b    d2,copy
  67.     clr.b    (a0)
  68.     bra.b    okay
  69. fail    moveq    #0,d0
  70. okay    move.l    a2,a7
  71.     movem.l    (a7)+,d1-d7/a0-a2/a6
  72.     rts
  73.  
  74.     SECTION "data",DATA
  75.  
  76. VarList:
  77.     dc.l 0
  78.  
  79.     end
  80.