/ / this routine provides almost the same facilities as the ctime / supplied with unix / the aim being to use .... bytes less core .... and less time / for compatability with the old ctime.c / the following symbols are defined / _localtime * functionally the same / * no time-zone / _dysize + functionally the same / _dmsize + functionally the same / / ijtime() return a character string of the form / Sun Sep 16 01:03:52 1977\n\0 / this being the present system time. / ctime(tvec) long tvec; return a similar string to above / the time used is contained in tvec. / / ian johnstone july 1975. / /*** use 1 for daylight saving. /*** use 0 otherwise timezone = 0.*60.*60. / secin8hr = 8.*60.*60. day70t75 = 365.+365.+366.+365.+365. .globl _ctime,_localtime,_dysize,_dmsize _localtime: mov 2(sp),r0 mov 4(sp),r1 jsr pc,1f mov $array,r0 rts pc _ctime: mov 2(sp),r0 mov 4(sp),r1 br 1f .globl _ijtime _ijtime: sys time 1: mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) sub $timezone,r1 sbc r0 / time zone correction. div $secin8hr,r0 / r0= no of 8 hr lots since start 1970 / r1= no of seconds into 8 hour lot mov r0,r3 clr r2 div $3,r2 / r2= no of days since start of 1970 / r3= no of 8 hours in day clr r0 div $60.,r0 / r0= no of minutes in 8 hr grp / r1= no of seconds ....... mov r1,array+00 mov $second,r4 / put in seconds jsr pc,numbin mov r0,r1 clr r0 div $60.,r0 / r0= no of hour into 8 hr grp / r1= no of minutes .......... mov r1,array+02 mov $minute,r4 / put in minutes jsr pc,numbin mov r3,r1 mul $8.,r1 add r0,r1 / r1= no of hours. mov r1,array+04 mov $hour,r4 / put in hours jsr pc,numbin / r2= no of dayes since start of 1970 (a thursday). clr r0 mov r2,r1 add $4.,r1 / adjust for starting on thursday div $7.,r0 / r1 = day of week 0->6 :: mon->sun mov r1,array+14 mov $weekday,r3 / put in day of week mov $sun,r4 / put in day of week jsr pc,stringin mov $69.,r1 0: inc r1 mov $365.,r0 bit $3,r1 bne 1f inc r0 1: sub r0,r2 bge 0b add r0,r2 / r2= day number in current year mov r2,array+16 mov $year+2,r4 mov r1,array+12 jsr pc,numbin / r1= year number mov $28.,mtab+2 / assume ordinary year clr r0 / leap year ?? div $4,r0 tst r1 bne 2f mov $29.,mtab+2 / really a leap year 2: mov $mtab,r0 0: sub (r0)+,r2 bge 0b add -(r0),r2 sub $mtab,r0 asr r0 / r0= month in year 0->11 mov r0,array+10 inc r2 / r2= day in month 1->31 mov r2,array+6 mov r2,r1 mov $daymonth,r4 / put in day of month jsr pc,numbin mov r0,r1 mov $month,r3 / put in month name. mov $jan,r4 / put in month name. jsr pc,stringin mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov $date,r0 rts pc .data array: 0 / seconds 0 / minutes 0 / hours 0 / day of month (1-31) 0 / month (0-11) 0 / year - 1900 0 / day of week (sunday=0) 0 / day of year (0-365) 0 / always zero date: weekday: < > month: < > daymonth: < > hour: < :> minute: < :> second: < > year: <1975\n\0> .even _dmsize: mtab: 31.;28.;31.;30.;31.;30.;31.;31.;30.;31.;30.;31. sun: <SunMonTueWedThuFriSat> jan: <JanFebMarAprMayJunJulAugSepOctNovDec> .text .even numbin: mov r0,-(sp) mov r1,-(sp) clr r0 div $10.,r0 bis $'0,r0 bis $'0,r1 movb r0,(r4)+ movb r1,(r4) mov (sp)+,r1 mov (sp)+,r0 rts pc stringin: mul $3,r1 add r4,r1 movb (r1)+,(r3)+ movb (r1)+,(r3)+ movb (r1),(r3) rts pc / / dysize(y) / { / if( (y%4) == 0 ) return(366); / return(365); / } / _dysize: clr r0 mov 2(sp),r1 div $4,r0 mov $366.,r0 neg r1 / c=0 if 0 remainder, c=1 if non-zero remainder sbc r0 rts pc