home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Programmation / Assembleur / ESA.lha / ESA / examples / sss / misc.ei < prev    next >
Text File  |  1998-10-30  |  6KB  |  202 lines

  1. *******************************************************************************
  2. * Init v1.0.1
  3. *******************************************************************************
  4. * INFO    execute some system inits
  5. * SYNOPSIS    success = Init[]
  6. *    d0
  7. * OUT    success    FALSE=ERROR; TRUE=OK!
  8. * MODIFIES    _DOSBase    dos.library ptr
  9. *    _StdOut    standard output filehandle
  10. *    CmdLnPtr    ptr to start of command line
  11. *    CmdLnLen    length of command line
  12. * REQUIRES    _DOSName    address of "dos.library",0
  13. *******************************************************************************
  14.  
  15.     function Init[],d1/a0-a1/a6:d0.l
  16.  
  17.     move.l    a0,CmdLnPtr    ;store command line
  18.     move.l    d0,CmdLnLen    ;data
  19.  
  20.     movea.l    4.w,a6
  21.     lea.l    _DOSName,a1
  22.     moveq.l    #0,d0
  23.     jsr    (_LVOOpenLibrary,a6)
  24.     move.l    d0,_DOSBase
  25.  
  26.     when.s d0
  27.      movea.l    d0,a6
  28.      jsr    (_LVOOutPut,a6)
  29.      move.l    d0,_StdOut    ;still TRUE (~0)
  30.     ewhen
  31.  
  32.     efunc
  33.  
  34. *******************************************************************************
  35. * CleanUp v1.0.3
  36. *******************************************************************************
  37. * INFO    frees allocated system resources
  38. * SYNOPSIS    CleanUp[]
  39. * REQUIRES    _DOSBase    dos.library ptr
  40. *******************************************************************************
  41.  
  42.     procedure CleanUp[],d0-d1/a0-a1/a6
  43.  
  44.     move.l    InFileHnd,d1    ;source file handle
  45.     when.s d1.l
  46.      movea.l    _DOSBase,a6
  47.      jsr    (_LVOClose,a6)
  48.     ewhen
  49.  
  50.     move.l    WrkBufLen,d0    ;free allocated buf
  51.     when.s d0.l
  52.      movea.l    4.w,a6
  53.      movea.l    WrkBufAdr,a1
  54.      jsr    (_LVOFreeMem,a6)
  55.     ewhen
  56.  
  57.     movea.l    _DOSBase,a1
  58.     movea.l    4.w,a6
  59.     jsr    (_LVOCloseLibrary,a6)
  60.  
  61.     moveq.l    #0,d0    ;retcode
  62.     eproc
  63.  
  64. *******************************************************************************
  65. * Print v1.0.0
  66. *******************************************************************************
  67. * INFO    prints a text to the standard output if quiet mode is OFF
  68. * SYNOPSIS    Print[TxtPtr]
  69. *          d2
  70. * IN    TxtPtr    ptr to NULL-terminated text string
  71. * REQUIRES    _DOSBase    dos.library ptr
  72. *    _StdOut    standard output handle
  73. *******************************************************************************
  74.  
  75.     procedure Print[d2],d0-d3/a0-a1/a6
  76.  
  77.     move.b    flags,d0
  78.     andi.b    #1<<F_QUIETMODE,d0
  79.  
  80.     when.s ~d0.b        ;if quiet mode OFF
  81.      movea.l    d2,a0
  82. .findend     tst.b    (a0)+
  83.      bne.s    .findend    ;find end of string
  84.      move.l    a0,d3
  85.      sub.l    d2,d3    ;length
  86.      movea.l    _DOSBase,a6
  87.      move.l    _StdOut,d1
  88.      jsr    (_LVOWrite,a6)
  89.     ewhen
  90.  
  91.     eproc
  92.  
  93. *******************************************************************************
  94. * ShowResult v1.1.0
  95. *******************************************************************************
  96. * INFO    prints out the texts associated to a given errcode
  97. * SYNOPSIS    ShowResult[ErrCode]
  98. *               d0
  99. * IN    ErrCode    0=OK, else E_xxxxxx (see defs.i)
  100. *******************************************************************************
  101.  
  102.     procedure ShowResult[d0]
  103.     when.s d0
  104.      Print[#txt_error]    ;"ERROR: "
  105.     ewhen
  106.     Print[(ErrTab,d0.l*4)]    ;print msg
  107.     eproc
  108.  
  109. *******************************************************************************
  110. * SkipSpaces v1.0.0
  111. *******************************************************************************
  112. * INFO    starting from the current position in a string, returns the
  113. *    position of the 1st character different from ' '
  114. * SYNOPSIS    SkipSpaces[StrPtr]
  115. *               a0
  116. * IN    StrPtr    ptr to a string
  117. * MODIFIES    a0.l    position of the 1st char <>' '
  118. *******************************************************************************
  119.  
  120.     procedure SkipSpaces[a0]
  121. .find    cmpi.b    #' ',(a0)+
  122.     beq.s    .find
  123.     subq.l    #1,a0
  124.     eproc
  125.  
  126. *******************************************************************************
  127. * Valu v1.0.2
  128. *******************************************************************************
  129. * INFO    converts a decimal ASCII string to an unsigned long integer
  130. * SYNOPSIS    IntVal = Valu[StrPtr]
  131. *    d0    a0
  132. * IN    StrPtr    ptr to numerical string
  133. * OUT    IntVal    unsigned integer
  134. * MODIFIES    a0.l    ptr after string
  135. * NOTE    it stops at the 1st char not inside ['0'...'9']
  136. *******************************************************************************
  137.  
  138.     function Valu[a0],d1-d2:d0
  139.     moveq.l    #0,d0
  140.     moveq.l    #0,d1
  141.     do
  142.      move.b    (a0)+,d1    ;get a digit (d)
  143.      subi.b    #'0',d1    ;convert to int
  144.      bcs.s    .exit    ;if <0...
  145.      cmpi.b    #9,d1
  146.      bhi.s    .exit    ;if >9...
  147.      move.l    d0,d2    ;IntVal
  148.      add.l    d0,d0    ;2*IntVal
  149.      lsl.l    #3,d2    ;8*IntVal
  150.      add.l    d2,d0    ;10*IntVal
  151.      add.l    d1,d0    ;10*IntVal+d -> IntVal
  152.     loop
  153. .exit
  154.     efunc
  155.  
  156. *******************************************************************************
  157. * Stru v1.0.0
  158. *******************************************************************************
  159. * INFO    converts an unsigned long integer to a NULL-terminated, decimal
  160. *    ASCII string
  161. * SYNOPSIS    Stru[Int,Dest,Len]
  162. *         d0  a0   d1
  163. * IN    Int    integer to convert
  164. *    Dest    ptr to destination buffer
  165. *    Len    the string will be exactly Len chars long
  166. *        (MUST be >0!!!)
  167. * NOTE    the destination buffer MUST be at least Len+1 bytes long!
  168. *******************************************************************************
  169.  
  170.     procedure    Stru[d0/a0/d1],d0-d2/a0
  171.     adda.l    d1,a0    ;last digit adr+1
  172.     clr.b    (a0)    ;final BLANK
  173.     subq.l    #1,d1
  174.     expire d1=d1
  175.      divul.l    #10,d2:d0    ;last digit
  176.      addi.b    #'0',d2    ;convert to ASCII
  177.      move.b    d2,-(a0)    ;store
  178.     nexp
  179.     eproc
  180.  
  181. *******************************************************************************
  182. * GetFileSize v1.0.1
  183. *******************************************************************************
  184. * INFO    returns the size in bytes of a file
  185. * SYNOPSIS    Size=GetFileSize[Hnd]
  186. *    d0    d1
  187. * IN    Hnd    filehandle
  188. * OUT    d0    0 on failure
  189. * REQUIRES    _DOSName    address of "dos.library",0
  190. * NOTE    uses TmpBuf (must be on a 4 bytes boundary)
  191. *******************************************************************************
  192.  
  193.     function GetFileSize[d1],d1-d2/a0-a1/a6:d0
  194.     move.l    #TmpBuf,d2
  195.     movea.l    _DOSBase,a6
  196.     jsr    (_LVOExamineFH,a6)
  197.     when.s d0.l
  198.      lea.l    TmpBuf,a0
  199.      move.l    (fib_Size,a0),d0
  200.     ewhen
  201.     efunc
  202.