home *** CD-ROM | disk | FTP | other *** search
/ A.N.A.L.O.G. Magazine 1985 October / 85_oct.atr / online5.act < prev    next >
Text File  |  2023-02-26  |  1KB  |  1 lines

  1. ¢MODULE  ; Action! version of Example 5¢¢; First, let's define the PROC's¢; to be called:¢¢PROC Print1=*()¢  PrintE("Number 1")¢RETURN¢¢PROC Print2=*()¢  PrintE("Number 2")¢RETURN¢¢PROC Print3=*()¢  PrintE("Number 3")¢RETURN¢¢; Next, we define a dummy PROC which¢; holds the addresses of the PROC's¢; we want to execute:¢;¢; (We can't define these in a¢; CARD ARRAY because they're NOT¢; constants and Action! would choke¢; on them.)¢¢PROC dummy=*() [¢  Print1 Print2 Print3 ]¢¢¢; Now, a MODULE statement because¢; we have to declare a variable:¢¢MODULE  ; for CARD ARRAY declaration¢¢; This declares a CARD ARRAY that¢; points (suprize!) to "dummy"¢¢CARD ARRAY¢  ptrary = dummy¢¢¢; This routine does a JMP indirect¢;to the address passed to it:¢¢PROC Indirect=*(CARD address) [¢¢  ; ("address" is passed in the A and¢  ; X registers)¢¢  $85 $AE      ;STA $AE save low byte¢  $86 $AF      ;STX $AF save high byte¢¢; NOTE! To change this to emulate¢;   ON x GOTO rather than¢;   ON x GOSUB, add this line here:¢; $68 $68      ;PLA/PLA pull off¢               ;        return address¢¢  $6C $AE $00 ] ;JMP ($AE)¢; jump indirect to routine, which¢; RTS's itself to the calling PROC¢¢¢; Now, our version of the¢; C "main" function:¢¢PROC main()¢BYTE i¢¢  FOR i = 0 TO 2 DO¢    ; Fetch address of routine to¢    ; call ( ptrary(i) ) and execute¢    ; it (via "Indirect" PROC)¢    Indirect(ptrary(i))¢  OD¢RETURN¢¢