please dont rip this site
; 29.8.00
;
;       @=$100                  ; normal com programm
        @=$200                  ; batch binary

        move.w  #$82,r5         ; start after space
        movu.bw  -2.b(r5.w),r6  ; cmdline length
        dec.w   r6              ; char after space

_10:    dec.w   r6              ; char left?
        bmi.b   _100            ; no
        move.b  (r5.w),r0       ; next char from cmdline
        inc.w   r5
        cmp.b   #' ',r0         ; space ?
        beq.b   _10             ; yes, ignore
        cmp.b   #'e',r0         ; echo command?
        beq.b   echo            ; yes
        cmp.b   #'+',r0         ; incr command
        beq.b   inc             ; yes
_100:   rts.w                   ; no other commands

inc:    move.w  r6,r2           ; length of number
        dec.w   r6              ; at least 1
        bmi.b   _100            ; no
        move.w  r5,r1           ; adr of first digit
        add.w   r6,r5           ; adr of last digit
_20:    inc.b   (r5.w)          ; inc last digit
        cmp.b   #'9',(r5.w)     ; now > 9?
        bls.b   _10             ; no: ok
        move.b  #'0',(r5.w)     ; set 0
        dec.w   r5              ; go to preceding digit
        dec.w   r6              ; digits left?
        bpl.b   _20             ; yes
_10:    bsr.w   out1            ; all done
_100:   rts.w
        
        
echo:   move.w  #buf,r1         ; write buffer
        move.w  #1,r2           ; write 1 char
_00:    dec.w   r6              ; chars left?
        bmi.b   _100            ; no
        move.b  (r5.w),r0       ; next char from cmdline
        inc.w   r5
        cmp.b   #'l',r0         ; lower case subcommand
        bne.b   _10             ; no
        inc.b   _200            ; yes: set flag >0
_10:    cmp.b   #'u',r0         ; upper case subcommand
        bne.b   _20             ; no
        dec.b   _200            ; yes: set flag <0
_20:    cmp.b   #'_',r0         ; space subcommand?
        bne.b   _21             ; no
        inc.b   _201            ; yes: set flag >0
_21:    cmp.b   #'.',r0         ; skip after . subcommand
        bne.b   _30             ; no
        inc.b   _202            ; remember number of . to skip
_30:    cmp.b   #':',r0         ; skip before . subcommand
        bne.b   _40             ; no
        dec.b   _202            ; remember number of . to skip
_40:    cmp.b   #' ',r0         ; space
        bne.b   _00             ; no: read more subcommands

_50:    dec.w   r6              ; chars left?
        bmi.b   _100            ; no
        move.b  (r5.w),r0       ; get next char
        inc.w   r5
        cmp.b   #'$',r0         ; start of hex value or date command
        bne.b   _60             ; no
        cmp.b   #'t',(r5.w)     ; date command?
        bne.b   _51             ; no
        dec.w   r6              ; number of chars left
        inc.w   r5              ; adr of next char
        move.b  #$2a,m0         ; get date function
        trap    #$21            ; call dos
        move.w  r2,r0           ; year
        divu.b  c100,m0|r0      ; last 2 digits -> m0
        lsr.w   #8,r0           ; last 2 digits -> r0
        move.w  #buf,r3         ; adr of write buffer
        bsr.w   _500            ; output in write buffer
        move.b  m1,r0           ; month
        bsr.w   _500            ; output in write buffer
        move.b  r1,r0           ; day
        bsr.w   _500            ; output in write buffer
        move.w  #buf,r1         ; adr of write buffer
        move.w  #6,r2           ; write 6 char: yymmdd
        bsr.w   out1            ; write it
        move.w  #1,r2           ; restore 1
        br.b    _50             ; process next char


_51:    bsr.w   hex2bin         ; convert hex to bin
        bsr.w   hex2bin         ; convert hex to bin
_60:    bsr.w   out             ; write it
        br.b    _50             ; process next char

_100:   bsr.w   in              ; read char from stdin
        bcs.b   _199            ; if error
        or.w    r0,r0           ; 1 char read
        beq.b   _199            ; no
        move.b  buf,r0          ; read char -> r0
        cmp.b   #10,r0          ; LF
        beq.b   _100            ; yes: ignore
        cmp.b   #13,r0          ; CR
        beq.b   _198            ; read LF and exit
        tst.b   #$ff,_200       ; lower/upper case flag
        beq.b   _103            ; not set
        bpl.b   _104            ; convert to lower
        cmp.b   #'a',r0         ; >= a ?
        blo.b   _103            ; no: nothing to convert
        cmp.b   #'z',r0         ; <= z ?
        bhi.b   _103            ; no: nothing to convert
        br.b    _105            ; convert
_104:   cmp.b   #'A',r0         ; >= A ?
        blo.b   _103            ; no: nothing to convert
        cmp.b   #'Z',r0         ; <= Z ?
        bhi.b   _103            ; no: nothing to convert
_105:   eor.b   #$20,r0         ; convert
_103:   tst.b   #$ff,_201       ; space flag
        beq.b   _106            ; not set
        cmp.b   #' ',r0         ; space ?
        bne.b   _106            ; no: nothing to do
        move.b  #'_',r0         ; replace by _
_106:   tst.b   #$ff,_202       ; skip after/before . flag
        beq.b   _110            ; not set
        bpl.b   _111            ; skip after .
        cmp.b   #'.',r0         ; is this char a . ?
        bne.b   _100            ; no: nothing to do
        inc.b   _202            ; yes: decr number of . to skip
        br.b    _100            ; next char
_111:   cmp.b   #'.',r0         ; is this char a . ?
        bne.b   _110            ; no: write char
        dec.b   _202            ; yes: dec number of . to output
        bne.b   _110            ; if not 0: write .
        move.b  #$80,_202       ; will skip the next 128 . 
        br.b    _100            ; next char

_110:   bsr.w   out             ; write char to stdout
        br.b    _100            ; next char

_198:   bsr.w   in              ; read LF
_199:   rts.w                   ; exit

_200:   dc.b    0               ; upper/lower flag
_201:   dc.b    0               ; space flag
_202:   dc.b    0               ; . flag

_500:   divu.b  c10,m0|r0       ; r0=high m0=low digit
        add.w   #'00',r0        ; convert to ascii
        move.w  r0,(r3.w)       ; copy in write buffer
        inc.w   r3              ; inc write pointer
        inc.w   r3              ; inc write pointer
        eor.w   r0,r0           ; clear r0
        rts.w

c100:   dc.b    100             ; constant 100
c10:    dc.b    10              ; constant  10

in:     move.b  #$3f,m0         ; read function
        eor.w   r3,r3           ; stdin
        trap    #$21            ; call dos
        rts.w

out:    move.b  r0,buf          ; copy char in write buffer
out1:   move.b  #$40,m0         ; write function
        move.w  #1,r3           ; stdout
        trap    #$21            ; call dos
        rts.w

hex2bin:dec.w   r6              ; decr. number of chars left
        move.b  (r5.w),m0       ; get next char
        inc.w   r5              ; incr pointer to next char
        or.b    #$20,m0         ; convert to lower case (A-F)
        sub.b   #'a'-10,m0      ; convert ascii to bin
        bpl.b   _10             ; all done if a-f
        add.b   #'a'-10-'0',m0  ; correct if 0-9
_10:    lsl.b   #4,r0           ; shift last nibble
        add.b   m0,r0           ; add new nibble
        rts.w
buf:                            ; write buffer


file: /Techref/dos/echadd_mac.htm, 7KB, , updated: 2004/5/20 15:44, local time: 2024/11/16 03:51,
TOP NEW HELP FIND: 
18.188.202.89:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://linistepper.com/techref/dos/echadd_mac.htm"> echadd.mac</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?