IFD __G2 opt p+,c16+ ENDC * * LIBRARY.H include file for HiSoft BASIC ½ HiSoft 1987 * * 30 Mar 88 changed for GENST2 compatibility * 5 May 93 inl_ macros added for inline trap calls * * Rules for HiSoft BASIC libraries * -------------------------------- * * Libraries be of the form: * * library NAME * * xref.l gl_scratch * all xrefs * xref get_string * * xdef test1 * then the user routine names * xdef test2 * * Note! -> xrefs and xdefs must be together before anything else * * subdef int,int * test1 subroutine that's passed 2 ints * fn_int int,int * test2 function that returns an int * * Note! -> The order of appearance *MUST* be the same as the xdefs * * libstart * after declarations before the code * * then your code... * * until there is no more or another library statement * * * get_string * * takes: a0 <- string descriptor * * returns: a1 <- address of string * d4.l <- length of string * * uses: a0,a1,d4 * * * get_array * * takes: a0 <- array descriptor * d0 <- number of dimensions the array should have * * returns: a2 <- address of first element in array * d4.l <- total length in bytes taken by array elements * * uses: a1,a2,d0,d4 * * * make_string * * takes: a0 <- string descriptor * a1 <- address of user copy of the string * d4.l <- length of string to be * * uses: d0-d4,a0-a2 * * * gl_scratch * * is a 128 byte buffer which may be used as workspace. It is used by BASIC * as the DTA, so be careful after Fsfirsts etc. This is the only space on * the heap that a library may use; if you need more, use the stack. * * New subs/functions WITHOUT parameters by Paul Jones global equr a5 local equr a4 tos equr d7 tos2 equr d6 library macro module !\1 section CODE endm subdef macro dc.b 48,NARG+1 params \1,\2,\3,\4,\5,\6,\7,\8,\9 endm subdef_np macro dc.b 48,NARG+1 endm fn_int macro dc.b 95,'%',NARG+1 params \1,\2,\3,\4,\5,\6,\7,\8,\9 endm fn_int_np macro dc.b 95,'%',NARG+1 endm fn_lng macro dc.b 95,'&',NARG+1 params \1,\2,\3,\4,\5,\6,\7,\8,\9 endm fn_lng_np macro dc.b 95,'&',NARG+1 endm fn_sng macro dc.b 95,'!',NARG+1 params \1,\2,\3,\4,\5,\6,\7,\8,\9 endm fn_sng_np macro dc.b 95,'!',NARG+1 endm fn_dbl macro dc.b 95,'#',NARG+1 params \1,\2,\3,\4,\5,\6,\7,\8,\9 endm fn_dbl_np macro dc.b 95,'#',NARG+1 endm fn_str_np macro dc.b 95,'$',NARG+1 endm params macro ifnc '\1','' dc.b l_\1 endc ifnc '\2','' dc.b l_\2 endc ifnc '\3','' dc.b l_\3 endc ifnc '\4','' dc.b l_\4 endc ifnc '\5','' dc.b l_\5 endc ifnc '\6','' dc.b l_\6 endc ifnc '\7','' dc.b l_\7 endc ifnc '\8','' dc.b l_\8 endc ifnc '\9','' dc.b l_\9 endc endm array_mask equ 8 var_para_mask equ 16 l_int equ 1 l_lng equ 2 l_sng equ 3 l_dbl equ 4 l_str equ 5 l_aint equ l_int+array_mask l_alng equ l_lng+array_mask l_asng equ l_sng+array_mask l_adbl equ l_dbl+array_mask l_astr equ l_str+array_mask l_vint equ l_int+var_para_mask l_vlng equ l_lng+var_para_mask l_vsng equ l_sng+var_para_mask l_vdbl equ l_dbl+var_para_mask l_vstr equ l_str+var_para_mask libstart macro dc.b 0 even endm option macro string ifc \1,'' fail Bad param to Option mexit endc dc.b *-z\@+1 dc.b \1 z\@ endm inl_sub macro name,trapno,callno,paras dc.b *-z\@+1 dc.b ' ',48 dc.b '\1' dc.b ' ' dc.b \2,\3>>8,\3&$FF params \4,\5,\6,\7,\8,\9,\A,\B,\C z\@ endm inl_int macro name,trapno,callno,paras dc.b *-z\@+1 dc.b ' ',95 dc.b '\1','%' dc.b ' ' dc.b \2,\3>>8,\3&$FF params \4,\5,\6,\7,\8,\9,\A,\B,\C z\@ endm inl_lng macro name,trapno,callno,paras dc.b *-z\@+1 dc.b ' ',95 dc.b '\1','&' dc.b ' ' dc.b \2,\3>>8,\3&$FF params \4,\5,\6,\7,\8,\9,\A,\B,\C z\@ endm inl_sng macro name,trapno,callno,paras dc.b *-z\@+1 dc.b ' ',95 dc.b '\1','!' dc.b ' ' dc.b \2,\3>>8,\3&$FF params \4,\5,\6,\7,\8,\9,\A,\B,\C z\@ endm inl_dbl macro name,trapno,callno,paras dc.b *-z\@+1 dc.b ' ',95 dc.b '\1','&' dc.b ' ' dc.b \2,\3>>8,\3&$FF params \4,\5,\6,\7,\8,\9,\A,\B,\C z\@ endm inl_str macro name,trapno,callno,paras dc.b *-z\@+1 dc.b ' ',95 dc.b '\1','$' dc.b ' ' dc.b \2,\3>>8,\3&$FF params \4,\5,\6,\7,\8,\9,\A,\B,\C z\@ endm