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 >
Wrap
Text File
|
1998-10-30
|
6KB
|
202 lines
*******************************************************************************
* Init v1.0.1
*******************************************************************************
* INFO execute some system inits
* SYNOPSIS success = Init[]
* d0
* OUT success FALSE=ERROR; TRUE=OK!
* MODIFIES _DOSBase dos.library ptr
* _StdOut standard output filehandle
* CmdLnPtr ptr to start of command line
* CmdLnLen length of command line
* REQUIRES _DOSName address of "dos.library",0
*******************************************************************************
function Init[],d1/a0-a1/a6:d0.l
move.l a0,CmdLnPtr ;store command line
move.l d0,CmdLnLen ;data
movea.l 4.w,a6
lea.l _DOSName,a1
moveq.l #0,d0
jsr (_LVOOpenLibrary,a6)
move.l d0,_DOSBase
when.s d0
movea.l d0,a6
jsr (_LVOOutPut,a6)
move.l d0,_StdOut ;still TRUE (~0)
ewhen
efunc
*******************************************************************************
* CleanUp v1.0.3
*******************************************************************************
* INFO frees allocated system resources
* SYNOPSIS CleanUp[]
* REQUIRES _DOSBase dos.library ptr
*******************************************************************************
procedure CleanUp[],d0-d1/a0-a1/a6
move.l InFileHnd,d1 ;source file handle
when.s d1.l
movea.l _DOSBase,a6
jsr (_LVOClose,a6)
ewhen
move.l WrkBufLen,d0 ;free allocated buf
when.s d0.l
movea.l 4.w,a6
movea.l WrkBufAdr,a1
jsr (_LVOFreeMem,a6)
ewhen
movea.l _DOSBase,a1
movea.l 4.w,a6
jsr (_LVOCloseLibrary,a6)
moveq.l #0,d0 ;retcode
eproc
*******************************************************************************
* Print v1.0.0
*******************************************************************************
* INFO prints a text to the standard output if quiet mode is OFF
* SYNOPSIS Print[TxtPtr]
* d2
* IN TxtPtr ptr to NULL-terminated text string
* REQUIRES _DOSBase dos.library ptr
* _StdOut standard output handle
*******************************************************************************
procedure Print[d2],d0-d3/a0-a1/a6
move.b flags,d0
andi.b #1<<F_QUIETMODE,d0
when.s ~d0.b ;if quiet mode OFF
movea.l d2,a0
.findend tst.b (a0)+
bne.s .findend ;find end of string
move.l a0,d3
sub.l d2,d3 ;length
movea.l _DOSBase,a6
move.l _StdOut,d1
jsr (_LVOWrite,a6)
ewhen
eproc
*******************************************************************************
* ShowResult v1.1.0
*******************************************************************************
* INFO prints out the texts associated to a given errcode
* SYNOPSIS ShowResult[ErrCode]
* d0
* IN ErrCode 0=OK, else E_xxxxxx (see defs.i)
*******************************************************************************
procedure ShowResult[d0]
when.s d0
Print[#txt_error] ;"ERROR: "
ewhen
Print[(ErrTab,d0.l*4)] ;print msg
eproc
*******************************************************************************
* SkipSpaces v1.0.0
*******************************************************************************
* INFO starting from the current position in a string, returns the
* position of the 1st character different from ' '
* SYNOPSIS SkipSpaces[StrPtr]
* a0
* IN StrPtr ptr to a string
* MODIFIES a0.l position of the 1st char <>' '
*******************************************************************************
procedure SkipSpaces[a0]
.find cmpi.b #' ',(a0)+
beq.s .find
subq.l #1,a0
eproc
*******************************************************************************
* Valu v1.0.2
*******************************************************************************
* INFO converts a decimal ASCII string to an unsigned long integer
* SYNOPSIS IntVal = Valu[StrPtr]
* d0 a0
* IN StrPtr ptr to numerical string
* OUT IntVal unsigned integer
* MODIFIES a0.l ptr after string
* NOTE it stops at the 1st char not inside ['0'...'9']
*******************************************************************************
function Valu[a0],d1-d2:d0
moveq.l #0,d0
moveq.l #0,d1
do
move.b (a0)+,d1 ;get a digit (d)
subi.b #'0',d1 ;convert to int
bcs.s .exit ;if <0...
cmpi.b #9,d1
bhi.s .exit ;if >9...
move.l d0,d2 ;IntVal
add.l d0,d0 ;2*IntVal
lsl.l #3,d2 ;8*IntVal
add.l d2,d0 ;10*IntVal
add.l d1,d0 ;10*IntVal+d -> IntVal
loop
.exit
efunc
*******************************************************************************
* Stru v1.0.0
*******************************************************************************
* INFO converts an unsigned long integer to a NULL-terminated, decimal
* ASCII string
* SYNOPSIS Stru[Int,Dest,Len]
* d0 a0 d1
* IN Int integer to convert
* Dest ptr to destination buffer
* Len the string will be exactly Len chars long
* (MUST be >0!!!)
* NOTE the destination buffer MUST be at least Len+1 bytes long!
*******************************************************************************
procedure Stru[d0/a0/d1],d0-d2/a0
adda.l d1,a0 ;last digit adr+1
clr.b (a0) ;final BLANK
subq.l #1,d1
expire d1=d1
divul.l #10,d2:d0 ;last digit
addi.b #'0',d2 ;convert to ASCII
move.b d2,-(a0) ;store
nexp
eproc
*******************************************************************************
* GetFileSize v1.0.1
*******************************************************************************
* INFO returns the size in bytes of a file
* SYNOPSIS Size=GetFileSize[Hnd]
* d0 d1
* IN Hnd filehandle
* OUT d0 0 on failure
* REQUIRES _DOSName address of "dos.library",0
* NOTE uses TmpBuf (must be on a 4 bytes boundary)
*******************************************************************************
function GetFileSize[d1],d1-d2/a0-a1/a6:d0
move.l #TmpBuf,d2
movea.l _DOSBase,a6
jsr (_LVOExamineFH,a6)
when.s d0.l
lea.l TmpBuf,a0
move.l (fib_Size,a0),d0
ewhen
efunc