 
; 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 16:44, local time: 2025/10/29 23:08, 
 
216.73.216.99,10-3-83-201:LOG IN | 
| ©2025 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? <A HREF="http://www.piclist.com/tecHREF/dos/echadd_mac.htm"> echadd.mac</A> | 
| Did you find what you needed? | 
|  PICList 2025 contributors: o List host: MIT, Site host massmind.org, Top posters @none found - Page Editors: James Newton, David Cary, and YOU! * Roman Black of Black Robotics donates from sales of Linistep stepper controller kits. * Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters. * Monthly Subscribers: Gregg Rew. on-going support is MOST appreciated! * Contributors: Richard Seriani, Sr. | 
| Ashley Roll has put together a really nice little unit here. Leave off the MAX232 and keep these handy for the few times you need true RS232! | 
.