home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Workbench / dosdrivers / HAPPYENV.LHA / MountENV.asm < prev    next >
Encoding:
Assembly Source File  |  1996-09-01  |  2.9 KB  |  151 lines

  1. *****************************************
  2. *        MountENV        *
  3. *    Mount tool for HappyENV-Handler    *
  4. *          0.8  31.8.96        *
  5. *****************************************
  6.  
  7. ; MountENV is Public Domain
  8.  
  9. ;Can be started from WB and CLI
  10. ;Tabsize=8
  11.  
  12.     INCDIR    source:include/
  13.     INCLUDE    exec/exec_lib.i
  14.     INCLUDE    dos/dos_lib.i
  15.     INCLUDE    libraries/expansion_lib.i
  16.  
  17. pr_CLI        = 172
  18. pr_MsgPort    = 92
  19. pr_CurrentDir    = 152
  20. sm_NumArgs    = 28
  21. sm_ArgList    = 36
  22.  
  23. dn_Next        = 0
  24. dn_Type        = 4
  25. dn_Task        = 8
  26. dn_Lock        = 12
  27. dn_Handler    = 16
  28. dn_StackSize    = 20
  29. dn_Priority    = 24
  30. dn_Startup    = 28
  31. dn_SegList    = 32
  32. dn_GlobalVec    = 36
  33. dn_Name        = 40
  34. dn_SIZEOF    = 44
  35.  
  36. ACCESS_READ    = -2
  37.  
  38. ;init place for needed structures on stack
  39. start    moveq    #20,d5        ;set return-code to FAIL
  40.     move.l    4.w,a6        ;exec-base to a6
  41.     sub.l    a1,a1
  42.     jsr    _LVOFindTask(a6)    ;find this task
  43.     move.l    d0,a4        ;a4=this task
  44.  
  45. ;check for WB or CLI start
  46.     moveq    #0,d6        ;reset WB-msg
  47.     tst.l    pr_CLI(a4)    ;a4=this task
  48.     bne.s    .CLI
  49.     lea    pr_MsgPort(a4),a0    ;it was WB-start
  50.     jsr    _LVOWaitPort(a6)
  51.     lea    pr_MsgPort(a4),a0
  52.     jsr    _LVOGetMsg(a6)
  53.     move.l    d0,d6        ;d6=message from WB
  54.  
  55. .CLI    lea    dosname(pc),a1    ;open dos.library
  56.     moveq    #30,d0
  57.     jsr    _LVOOpenLibrary(a6)
  58.     tst.l    d0
  59.     beq    Ende2
  60.     move.l    d0,a6
  61.     lea    envarc(pc),a0
  62.     move.l    a0,d1
  63.     moveq    #ACCESS_READ,d2
  64.     jsr    _LVOLock(a6)    ;make real assign out of
  65.     move.l    d0,d1        ;defer assign to ENVARC:
  66.     beq.s    .A
  67.     jsr    _LVOUnLock(a6)
  68. .A    move.l    a6,a1
  69.     move.l    4.w,a6
  70.     jsr    _LVOCloseLibrary(a6)
  71.  
  72.     moveq    #dn_SIZEOF,d0    ;get mem for device node
  73.     move.l    #1<<16!1,d1
  74.     jsr    _LVOAllocMem(a6)
  75.     tst.l    d0
  76.     beq.s    Ende2
  77.     move.l    d0,a2
  78.  
  79.     moveq    #handend-handler,d0    ;init device node
  80.     lea    handler(pc),a1
  81.     bsr    CopyBSTR
  82.     beq.s    Ende2
  83.     move.l    d0,dn_Handler(a2)
  84.     move.l    #2000,dn_StackSize(a2)
  85.     moveq    #5,d0
  86.     move.l    d0,dn_Priority(a2)
  87.     moveq    #-1,d0
  88.     move.l    d0,dn_GlobalVec(a2)
  89.     moveq    #envend-envname,d0
  90.     lea    envname(pc),a1
  91.     bsr    CopyBSTR
  92.     beq.s    Ende2
  93.     move.l    d0,dn_Name(a2)
  94.  
  95.     lea    expname(pc),a1    ;open expansion.library
  96.     moveq    #30,d0
  97.     move.l    4.w,a6
  98.     jsr    _LVOOpenLibrary(a6)
  99.     tst.l    d0
  100.     beq.s    Ende2
  101.     move.l    d0,a6
  102.     move.l    a2,a0        ;add new device node
  103.     moveq    #0,d0
  104.     moveq    #0,d1
  105.     jsr    _LVOAddDosNode(a6)
  106.     tst.l    d0
  107.     beq.s    Ende3
  108.     moveq    #0,d5        ;set return code to OK
  109.  
  110. ;clean up all things used
  111. Ende3    move.l    a6,a1
  112.     move.l    4.w,a6
  113.     jsr    _LVOCloseLibrary(a6)
  114.  
  115. ;end program
  116. Ende2    move.l    d5,d0        ;set return-code
  117.     tst.l    d6        ;wb-msg ? -> started from WB
  118.     bne.s    .Jump
  119.     rts            ;THE END ! from CLI
  120. .Jump    jsr    _LVOForbid(a6)    ;must be in forbid-state
  121.     move.l    d6,a1
  122.     jmp    _LVOReplyMsg(a6)    ;THE END ! from WB
  123.  
  124.  
  125. CopyBSTR    ;entry: d0=size, a1=string
  126.         ;exit:  d0=BSTR
  127.     movem.l    a0-a2/a6,-(sp)
  128.     move.l    a1,a2
  129.     moveq    #1,d1
  130.     move.l    4.w,a6
  131.     jsr    _LVOAllocMem(a6)
  132.     move.l    d0,a1
  133.     lsr.l    #2,d0
  134.     beq.s    .end
  135. .loop    move.b    (a2)+,(a1)+
  136.     bne.s    .loop
  137.     tst.l    d0
  138. .end    movem.l    (sp)+,a0-a2/a6
  139.     rts
  140.  
  141. version    dc.b    "$VER: MountENV 0.8 (31.8.96)",10,0
  142. dosname    dc.b    "dos.library",0
  143. expname    dc.b    "expansion.library",0
  144. envarc    dc.b    "ENVARC:",0
  145. handler    dc.b    18,"L:HappyENV-Handler",0
  146. handend
  147. envname    dc.b    3,"ENV",0
  148. envend
  149.         end
  150.  
  151.