home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++
- * Library-Modul "strftime"
- * Jens Gelhar 09.02.92, 16.04.94
-
- xdef strftime__PcUiPCcPC02tm
- xdef _strftime
-
- strftime__PcUiPCcPC02tm:
- _strftime:
- ; 0: target, 4: len, 8: fmt, 12: tm
- movem.l d1/a0-a4,-(a7)
- movem.l 6*4+4(a7),a0-a3; a0: target, a1: end, a2: fmt, a3: tm
- add.l a0,a1
- Loop move.b (a2)+,d0
- beq End
- cmp.b #'%',d0
- beq.b Protz
- lput bsr put
- cmp.l a1,a0
- blo.b Loop
- bra End
- Protz move.b (a2)+,d0
- beq End
- cmp.b #'%',d0
- beq.b lput
- cmp.b #'a',d0
- bne.b A
- move.l 24(a3),d0
- lea astr(pc),a4
- bra sd0
- A
- cmp.b #'A',d0
- bne.b b
- move.l 24(a3),d0
- lea Astr(pc),a4
- bra sd0
- b
- cmp.b #'b',d0
- bne.b B
- move.l 16(a3),d0
- lea bstr(pc),a4
- bra sd0
- B
- cmp.b #'B',d0
- bne.b c
- lea Bstr(pc),a4
- move.l 16(a3),d0
- bra sd0
- c
- cmp.b #'c',d0
- bne.b d
- move.l 16(a3),d0
- lea bstr(pc),a4
- bsr sd0Sub
- moveq #' ',d0
- bsr put
- move.l 12(a3),d0
- bsr Number2Sub ; Monatstag
- moveq #' ',d0
- bsr put
- move.l 8(a3),d0 ; Stunde (24)
- bsr Number2Sub
- moveq #':',d0
- bsr put
- move.l 4(a3),d0 ; Minute
- bsr Number2Sub
- moveq #':',d0
- bsr put
- move.l (a3),d0 ; Sekunde
- bsr Number2Sub
- moveq #' ',d0
- bsr put
- move.l 20(a3),d0 ; Jahr
- add.w #1900,d0
- bsr NumberSub
- bra Loop
- d
- cmp.b #'d',d0
- bne.b H
- move.l 12(a3),d0 ; Tag im Monat
- bra Number2
- H
- cmp.b #'H',d0
- bne.b I
- move.l 8(a3),d0 ; Stunde (24)
- bra Number2
- I
- cmp.b #'I',d0
- bne.b j
- move.l 8(a3),d0
- cmp.w #12,d0 ; Stunde (12)
- bls.b .1
- sub.w #12,d0
- .1 tst.w d0
- bne Number2
- moveq #12,d0
- bra Number2
- j
- cmp.b #'j',d0
- bne.b m
- move.l 28(a3),d0 ; yday
- addq.l #1,d0
- bsr NumberSub
- bra Loop
- m
- cmp.b #'m',d0
- bne.b M
- move.l 16(a3),d0 ; Monat
- addq.l #1,d0
- bra Number2
- M
- cmp.b #'M',d0
- bne.b p
- move.l 4(a3),d0 ; Minute
- bra Number2
- p
- cmp.b #'p',d0
- bne.b S
- moveq #'A',d0 ; AM
- cmp.w #12,8+2(a3)
- bls.b .1
- moveq #'P',d0 ; PM
- .1 bsr put
- moveq #'M',d0
- bsr put
- bra Loop
- S
- cmp.b #'S',d0
- bne.b U
- move.l (a3),d0 ; Sekunde
- bra Number2
- U
- cmp.b #'U',d0
- bne.b w
- move.l 28(a3),d0
- add.l 24(a3),d0
- u1 divu #7,d0 ; Woche bzgl. Sonntag
- Number bsr NumberSub
- bra Loop
- w
- cmp.b #'w',d0
- bne.b W
- move.l 24(a3),d0 ; Wochentag numerisch
- bra.b Number
- W
- cmp.b #'W',d0
- bne.b x
- move.l 24(a3),d0
- subq.w #1,d0
- bhs.b .1
- moveq #6,d0
- .1 add.l 28(a3),d0 ; Woche bzgl. Montag
- bra.b u1
- x
- cmp.b #'x',d0
- bne.b X
- move.l 16(a3),d0
- lea bstr(pc),a4 ; Monat
- bsr.b sd0Sub
- moveq #' ',d0
- bsr put
- move.l 12(a3),d0
- bsr Number2Sub ; Monatstag
- moveq #' ',d0
- bsr put
- move.l 20(a3),d0 ; Jahr
- add.w #1900,d0
- bra.b Number
- X
- cmp.b #'X',d0
- bne.b y
- move.l 8(a3),d0 ; Stunde (24)
- bsr Number2Sub
- moveq #':',d0
- bsr put
- move.l 4(a3),d0 ; Minute
- bsr Number2Sub
- moveq #':',d0
- bsr put
- move.l (a3),d0 ; Sekunde
- bra Number2
- y
- cmp.b #'y',d0
- bne.b Y
- move.l 20(a3),d0 ; Jahr
- bra Number
- Y
- cmp.b #'Y',d0
- bne Loop
- move.l 20(a3),d0 ; Jahr
- add.w #1900,d0
- bra Number
-
- sd0: ; d0-ten String aus d4 coden
- bsr.b sd0Sub
- bra Loop
- sd0Sub: tst.w d0
- beq.b sd0copy
- sd0find: cmp.l #out,a4
- bhi.b sd0Ret
- tst.b (a4)+
- bne.b sd0find
- subq.w #1,d0
- bgt.b sd0find
- sd0copy: move.b (a4)+,d0
- beq.b sd0Ret
- bsr put
- bra.b sd0copy
- sd0Ret: rts
-
- End ; Ende:
- moveq #0,d0
- bsr put
- move.l a0,d0
- sub.l 6*4+4(a7),d0
- subq.l #1,d0
- cmp.l a1,a0
- blo.b .pop
- ; Überlauf:
- moveq #0,d0 ; Ergebnis 0
- tst.l 6*4+8(a7)
- beq.b .pop ; Stringlänge > 0?
- clr.b -(a1) ; dann trotzdem Nullbyte
- .pop movem.l (a7)+,d1/a0-a4
- rts
-
- NumberSub: ; d0 bis zu vierstellig
- and.l #$3FFF,d0
- divu #1000,d0
- tst.w d0
- beq.b .0
- add.b #'0',d0
- bsr.b put
- clr.w d0
- .0 swap d0
- divu #100,d0
- tst.w d0
- beq.b .1
- add.b #'0',d0
- bsr.b put
- clr.w d0
- .1 swap d0
- divu #10,d0
- tst.w d0
- beq.b .2
- add.b #'0',d0
- bsr.b put
- clr.w d0
- .2 swap d0
- add.b #'0',d0
- bra.b put
-
- Number2: ; d0 zweistellig putten
- bsr.b Number2Sub
- bra Loop
- Number2Sub: and.l #$7F,d0
- divu #10,d0
- add.b #'0',d0
- bsr.b put
- swap d0
- add.b #'0',d0
- ; *
- put cmp.l a1,a0
- bhs.b pt1
- move.b d0,(a0)+
- pt1 rts
-
- astr dc.b 'Sun',0,'Mon',0,'Tue',0,'Wed',0,'Thu',0,'Fri',0,'Sat',0
- Astr dc.b 'Sunday',0,'Monday',0,'Tuesday',0,'Wednesday',0,'Thursday',0,'Friday',0,'Saturday',0
-
- bstr: dc.b 'Jan',0,'Feb',0,'Mar',0,'Apr',0,'May',0,'Jun',0
- dc.b 'Jul',0,'Aug',0,'Sep',0,'Oct',0,'Nov',0,'Dec',0
-
- Bstr: dc.b 'January',0,'February',0,'March',0,'April',0,'May',0,'June',0
- dc.b 'July',0,'August',0,'September',0,'October',0,'November',0,'December',0
- out:
-
- end
-