home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / DEVELOP / EXTCALL / GFA / EXTCALL.GFA (.txt) < prev    next >
GFA-BASIC Atari  |  2000-12-26  |  1KB  |  65 lines

  1. '
  2. ' Extern Call for GFA
  3. ' (c)2000 Richard Gordon Faika
  4. '
  5. '
  6. ' Um die Anzahl oder Art der Parameter zu ändern, das
  7. ' Assembler-Inline und hier die Parameterübergabe
  8. ' entsprechend anpassen.
  9. '
  10. '
  11. '
  12. '
  13. '
  14. @init_inlines
  15. @main
  16. '
  17. PROCEDURE init_inlines
  18.   '
  19.   PRINT "init_inlines()"
  20. ' ## INLINE:
  21. ' $0000: 60 1a 00 00 00 36 00 00 00 00 00 00 3f dc 00 00 
  22. ' $0010: 00 00 00 00 00 00 00 00 00 07 00 00 30 2f 00 04 
  23. ' $0020: 41 fa 00 20 0c 40 ff 9d 66 04 20 08 4e 75 30 fc 
  24. ' $0030: ff ff 30 ef 00 04 20 ef 00 06 30 af 00 0a 42 80 
  25. ' $0040: 4e 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  26. ' $0050: 00 00 00 00 00 00 
  27. ' 86  Bytes.
  28.   INLINE excall%,86
  29.   '
  30.   varbuf%=C:excall%(-99)    ! dummy-call and get adress varbuffer
  31.   PRINT "Adress of callable Routine: $";HEX$(excall%)
  32.   PRINT "Enter this Adress in the extern Testprogram."
  33.   '
  34.   ABSOLUTE call.flag&,varbuf%   ! set flag
  35.   ABSOLUTE call.par1&,varbuf%+2 ! set par1
  36.   ABSOLUTE call.par2%,varbuf%+4 ! set par2
  37.   ABSOLUTE call.par3&,varbuf%+8 ! set par2
  38.   '
  39. RETURN
  40. PROCEDURE main
  41.   PRINT "wait for extern call..."
  42.   PRINT "(press any key to quit)"
  43.   DO
  44.     ~EVNT_TIMER(25)                      ! give up CPU-Time in Multitasking
  45.     IF call.flag&                        ! Routine called?
  46.       @my_routine(call.par1&,call.par2%,call.par3&)
  47.     ENDIF
  48.   LOOP UNTIL INP?(2)                     ! wait for key
  49.   ~INP(2)
  50. RETURN
  51. '
  52. > PROCEDURE my_routine(a&,b%,c&)
  53.   PRINT
  54.   PRINT "===================="
  55.   PRINT "called: my_routine()"
  56.   PRINT "===================="
  57.   PRINT "par 1 (WORD): ";a&
  58.   PRINT "par 2 (LONG): ";b%
  59.   PRINT "par 3 (WORD): ";c&
  60.   PRINT "===================="
  61.   '
  62.   CLR call.flag&        ! clear flag
  63.   '
  64. RETURN
  65.