
REM --------------------------------------------------------------------
REM EXAMPLE OF USE OF THE PHASER WITH AMIGABASIC
REM 
REM COPYRIGHT LORICIEL 1989
REM                     
REM --------------------------------------------------------------------




Main:
REM - Functions from dos.library                   
DECLARE FUNCTION xOpen&  LIBRARY
DECLARE FUNCTION xRead&  LIBRARY
DECLARE FUNCTION xWrite& LIBRARY


REM - Functions from exec.library
DECLARE FUNCTION AllocMem&() LIBRARY




PRINT:PRINT "opening libraries ";
LIBRARY "dos.library"
LIBRARY "exec.library"
REM LIBRARY "graphics.library"
PRINT "libraries opened"



GOSUB openecran


GOSUB chargement

IF loadError$ = "" THEN

  PRINT"       FIRE 5 TIMES"
  PRINT"AT THE CENTER OF THE SCREEN"

  REM launch of phaser interrupt routine
  addr& = mybuf& +12
  CALL addr&
  

  CLS
 
  PRINT"you can recalibrate by pressing 'SPACE'"
  PRINT"or quit by pressing 'RETURN'"

  
  clav$ = ""
  posx = 0
  posy = 0
  POKEL mybuf&,1000  
  
  WHILE (clav$="")

     clav$ = INKEY$

     IF clav$ = " "  THEN
     
        GOSUB recalibre   
        clav$=""
     END IF
     
     
     posx = PEEKL(mybuf&)
     
     IF posx <> 1000 THEN
       posy = PEEKL(mybuf& + 4)
       

       CALL showspot(posx,posy)
       POKEL mybuf&,1000  
     END IF  
     
  WEND


  REM disconnect interrupt routine
  addr& = mybuf& +16
  CALL addr&

ELSE
  PRINT loadError$
END IF


GOSUB closeecran
GOSUB cleanup

END



Mcleanup2:
LIBRARY CLOSE
IF loadError$ <> "" THEN PRINT loadError$
END





chargement:

REM - From include/libraries/dos.h
REM - MODE_NEWFILE = 1006 
REM - MODE_OLDFILE = 1005  
  
REM -------------------------------------------------------------------
REM - opening file which contain the phaser routine  
REM -------------------------------------------------------------------
filename$="phaser.bin"+CHR$(0)
fhandle& = xOpen&(SADD(filename$),1005)
IF fhandle& = 0 THEN
   loadError$ = "can't find file PHASER.BIN"
   GOTO cleanup
END IF




REM -------------------------------------------------------------------
REM - memory allocation for phaser routine
REM -------------------------------------------------------------------
ClearPublic& = 65537&
mybufsize& = 10000
mybuf& = AllocMem&(mybufsize&,ClearPublic&)

IF mybuf& = 0 THEN
   loadError$ = "can't allocate memory"
   GOTO cleanup
END IF





REM ---------------------------------------------------------------------
REM - read file
REM ---------------------------------------------------------------------

rLen& = xRead&(fhandle&,mybuf&,10000)


RETURN



cleanup:

IF fhandle& <> 0 THEN 
  CALL xClose&(fhandle&)
  fhandle& = 0
END IF
  
IF mybuf& <> 0 THEN
  CALL FreeMem&(mybuf&,mybufsize&)
  mybuf& = 0
END IF  


RETURN



REM ------------------------------------------------------------------
REM - open main screen
REM ------------------------------------------------------------------

openecran:

REM screen 320*200 16 colors
REM  
SCREEN 1,320,200,4,1
WINDOW 1,"   PHASER   ",,15,1
WINDOW OUTPUT 1
ecranouvert = 1
CIRCLE  (160,100),10,1,,,1
RETURN


REM 
REM  RECALIBRATION 
REM
recalibre:
CLS
CIRCLE (160,100),10,1,,,1


PRINT"       FIRE 5 TIMES "
PRINT" AT THE CENTER OF THE SCREEN"
addr&=mybuf& +14
CALL  addr&
CLS
PRINT"you can recalibrate bu pressing 'SPACE'"
PRINT"or quit by pressing 'RETURN'"
RETURN


closeecran:
IF ecranouvert = 1 THEN
   WINDOW CLOSE 1 
   SCREEN CLOSE 1
END IF

RETURN


REM 
REM

SUB showspot(a,b) STATIC

PSET (a,b),1
END SUB

