!!!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)
}}}