home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / subroutines / datetime.amos / datetime.amosSourceCode
AMOS Source Code  |  1991-06-16  |  3KB  |  91 lines

  1. '                *-------------------------------------------* 
  2. '                |                                           | 
  3. '                |    This is some sample code to show how   | 
  4. '                |    to get the date and time from within   | 
  5. '                |    Amos. Written in version 1.23.         | 
  6. '                |    By Tony Domigan & Evan Thomas.         | 
  7. '                |                                           | 
  8. '                *-------------------------------------------* 
  9. '
  10. '  First allocate 12 bytes of storage and get its address. I think the 
  11. '  storage has to be word aligned, but I'm not sure. In any case the 
  12. '  following code makes the address word aligned (AMOS string variables
  13. '  are always half word aligned).  
  14. '  
  15. DATE$=Space$(14)
  16. DATE=Varptr(DATE$)
  17. DATE=DATE+(DATE mod 4)
  18. '
  19. '  Some mundane stuff. 
  20. Curs Off 
  21. Dim MONTH$(12)
  22. For M=1 To 12
  23.    Read MONTH$(M)
  24. Next M
  25. Data "January","February","March","April","May","June","July"
  26. Data "August","September","October","November","December"
  27. '
  28. '  Load the address into data registor one and call the Amiga DOS date   
  29. '  function. This is described in "Amiga System Programmer's Guide" by 
  30. '  Dittrich, Gelfand & Schemmel, published by Abacus and no doubt in 
  31. '  many places as well.
  32. '
  33. Do 
  34.    Dreg(1)=DATE
  35.    R=Doscall(-192)
  36.    '
  37.    '  After the call the data is in the string DATE$. The format is:
  38.    '               word 1 = days since 1/1/1978 
  39.    '               word 2 = minutes   
  40.    '               word 3 = sixtieths of a second elapsed in the minute 
  41.    '
  42.    DAYS=Leek(DATE) : Rem 4 byte day value 
  43.    MS=Leek(DATE+4) : Rem 4 byte minute value
  44.    TICK=Leek(DATE+8) : Rem 4 byte sixtieths of a second value 
  45.    '  
  46.    ' date-time conversion routine 
  47.    ' modified from C source [Programmer's Guide to Amiga (Peck) p42]  
  48.    '
  49.    N=DAYS-2251
  50.    Y=(4*N+3)/1461
  51.    NN=N-(1461*Y)/4
  52.    YY=Y+1984
  53.    M=(5*NN+2)/153
  54.    D=NN-(153*M+2)/5+1
  55.    MM=M+3
  56.    '
  57.    ' MM=months
  58.    ' MN=minutes 
  59.    ' SECS=seconds 
  60.    ' TICK=sixtieths of a second in the minute 
  61.    '
  62.    If MM>12
  63.       Inc YY
  64.       MM=MM-12
  65.    End If 
  66.    HR=Int(MS/60)
  67.    MN=MS-(HR*60)
  68.    SECS=TICK/60
  69.    '
  70.    '  Format and output.
  71.    '
  72.    Locate 8,12
  73.    Print Using "##";D;
  74.    Print " ";MONTH$(MM);YY;
  75.    Locate 21,12
  76.    Print Using "###";HR;
  77.    Locate 24,12
  78.    If MN<10
  79.       Print ":0"; Using "#";MN;
  80.    Else 
  81.       Print ":"; Using "##";MN;
  82.    End If 
  83.    Locate 27,12
  84.    If SECS<10
  85.       Print ":0"; Using "#";SECS
  86.    Else 
  87.       Print ":"; Using "##";SECS
  88.    End If 
  89.    '
  90.    Multi Wait 
  91. Loop