!!!Misc useful ACTION! Functions
General Information
Author: Carsten Strotmann \\
Language: ACTION! \\
Compiler/Interpreter: ACTION! \\
{{{
;******************************
;** **
;** PHOENIX SOFTCREW **
;** STANDARTROUTINEN **
;** DIVERSES "DIVERS.INC" **
;******************************
MODULE
BYTE err,iostat=$23
;-----------------------------------
; clear screen
PROC Cls ()
Put (125)
RETURN
;-----------------------------------
; cursor enabled
PROC C_On ()
BYTE crsin=752
crsin=0
RETURN
;-----------------------------------
; cursor disabled
PROC C_Off ()
BYTE crsin=752
crsin=1
RETURN
;-----------------------------------
; wait some time
PROC Pause (CARD times)
BYTE wsync=$14,q
CARD u
FOR u=1 TO times
DO
FOR q=1 TO 200
DO
wsync=q
OD
OD
RETURN
;-----------------------------------
; beep tone
PROC Beep (BYTE times)
BYTE u
FOR u= 1 TO times
DO
PutD (0,253)
Pause (10)
OD
RETURN
;------------------------------------
; ATARI Rainbow effekt
PROC Rainbow (BYTE col,INT direc)
BYTE rtclok=$14,
wsync=$D40A,
vcount=$D40B,
key=764,d,e
BYTE ARRAY color(4)=$D016
key=255
WHILE key=255
DO
IF e#rtclok THEN
e=rtclok
d=0
FI
IF direc=0 THEN
d=vcount
e=0
ELSE
d==+direc
FI
wsync=rtclok
color(col)=e+d
OD
RETURN
;-----------------------------------
; Coldstart
PROC Boot=$E477 ()
;-----------------------------------
; enable / disable ANTIC DMA
PROC Scr ()
BYTE sdmctl=$22F
sdmctl==!$20
RETURN
;-----------------------------------
; query HELP-Function Key
BYTE FUNC Help ()
BYTE hplflg=$2DC
RETURN (hplflg)
;-----------------------------------
; get key
BYTE FUNC Inkey ()
BYTE atascii=$2FB,chasci=$2FC
BYTE POINTER keydefp
CARD keydef=$79
chasci=$FF
keydefp=keydef
DO
;
UNTIL chasci#$FF
OD
keydefp==+chasci
atascii=keydefp^
chasci=$FF
RETURN (atascii)
;-----------------------------------
; disable attract mode
; (screensaver)
PROC Noattr ()
BYTE attr=$4D
attr=0
RETURN
;-----------------------------------
; swap two card vars
PROC Swap (CARD a,b)
CARD x
x=a
a=b
b=x
RETURN
;-----------------------------------
; returns lowest
CARD FUNC Mini (CARD a,b)
CARD result
IF a<b THEN
result=a
ELSE
result=b
FI
RETURN (result)
;-----------------------------------
; return highest
CARD FUNC Maxi (CARD a,b)
CARD result
IF a>b THEN
result=a
ELSE
result=b
FI
RETURN (result)
;-----------------------------------
; set VBI Routine
PROC SETVBV=$E45C (BYTE mode,high,low)
PROC SetVbi (CARD vektor)
SETVBV (7,vektor/$100,vektor MOD $100)
RETURN
;-----------------------------------
; reset VBI to OS VBI Vector
PROC RstVbi ()
SetVbi ($E462)
RETURN
;----------------------------------
; set a bit in a byte
BYTE FUNC SetBit (BYTE value,bit)
BYTE dumm
dumm=1
dumm==LSH bit
value==%dumm
PrintBE (value)
RETURN (value)
;----------------------------------
; clears a bit in a byte
BYTE FUNC ClearBit (BYTE value,bit)
BYTE dumm
dumm=1
dumm==LSH bit
dumm==!$FF
value==&dumm
RETURN (value)
;-----------------------------------
; query if bit is set
BYTE FUNC AskBit (BYTE value,bit)
BYTE dumm
dumm=1
dumm==LSH bit
value==&dumm
IF value>0 THEN
value=1
FI
RETURN (value)
;-----------------------------------
; jump to DOS
PROC Dosin ()
[ $6C $0C $00 ]
;-----------------------------------
; disable BREAK-Key
PROC BreakOff ()
CARD brkky=$236
brkky==+$C
RETURN
;-----------------------------------
; Error-Handler
PROC Errhand ()
IF iostat>$7F THEN
err=iostat
ELSE
err=0
FI
RETURN
;----------------------------------
; print Error Message with Errorcode
PROC Errmess (CARD x,BYTE y)
IF err>0 THEN
PutE ()
Print ("Error - ")
PrintB (err)
FI
RETURN
;----------------------------------
; close all CIO Buffer
PROC AllClose ()
BYTE u
FOR u=1 TO 7
DO
Close (u)
OD
RETURN
;----------------------------------
; ASCII to Internal
BYTE FUNC Inter (BYTE b)
IF b>=0 AND b<32 THEN
b==+64
ELSEIF b>31 AND b<96 THEN
b==-32
ELSEIF b>127 AND b<160 THEN
b==+64
ELSEIF b>159 AND b<224 THEN
b==-32
FI
RETURN (b)
;-----------------------------------
; Internal to ASCII
BYTE FUNC Ascii (BYTE b)
IF b>=0 AND b<64 THEN
b==+32
ELSEIF b>63 AND b<96 THEN
b==-64
ELSEIF b>127 AND b<192 THEN
b==+32
ELSEIF b>191 AND b<224 THEN
b==-64
FI
RETURN (b)
;----------------------------------
; Wait for VBI
PROC Wvbi ()
BYTE rtclk=$14,u
u=rtclk
DO
;
UNTIL rtclk#u
OD
RETURN
;----------------------------------
; Return Highbyte
BYTE FUNC High (CARD value)
BYTE ret
ret=value/$100
RETURN (ret)
;----------------------------------
; return Lowbyte
BYTE FUNC Low (CARD value)
RETURN (value)
;----------------------------------
; Clicksound
PROC Click (BYTE time)
CARD u
Sound (0,30,10,8)
FOR u=1 TO time*100
DO : OD
Sound (0,0,0,0)
RETURN
;----------------------------------
; Scan Screen at position
BYTE FUNC Scan (BYTE x,y)
BYTE chr
BYTE POINTER msc
CARD savmsc=$58
msc=savmsc+y*40+x
chr=msc^
RETURN (chr)
}}}