/* * Abuse - dark 2D side-scrolling platform game * Copyright (c) 1995 Crack dot Com * * This software was released into the Public Domain. As with most public * domain software, no warranty is made or implied by Crack dot Com or * Jonathan Clark. */ #ifndef _LISP_HPP_INCLUDED_ #define _LISP_HPP_INCLUDED_ #include #include extern "C" { #include "li_modul.h" #include "li_proto.h" } /* ------------------------- COMPATIBILITY ------------------------- */ #define L_SYMBOL LI_tSYMBOL #define L_STRING LI_tSTRING #define L_CONS_CELL LI_tCONS #define L_NUMBER LI_tLONG #define L_CHARACTER LI_tLONG #define L_POINTER LI_tUSER #define L_FIXED_POINT LI_tFIXEDPOINT #define PERM_SPACE 0 #define TEMP_SPACE 0 #define cons_cell Cell #define lisp_symbol Cell /* ------------------------- GLOBAL VARS ------------------------- */ extern int current_space; extern void *enviroment; /* ------------------------- GLOBAL LISP VARS ------------------------- */ extern Cell *l_difficulty,*l_easy,*l_hard,*l_medium,*l_main_menu, *l_logo,*l_state_art,*l_abilities,*l_state_sfx, *l_song_list,*l_filename,*l_sfx_directory,*l_max_hp, *l_default_font,*l_morph,*l_max_power,*l_default_abilities, *l_default_ai_function,*l_tile_files,*l_empty_cache,*l_range, *l_joy_file,*l_hurt_all,*l_death_handler,*l_title_screen, *l_console_font,*l_fields,*l_dist,*l_pushx,*l_pushy, *l_object,*l_tile; /* variables for the status bar */ extern Cell *l_statbar_ammo_x,*l_statbar_ammo_y, *l_statbar_ammo_w,*l_statbar_ammo_h, *l_statbar_ammo_bg_color, *l_statbar_health_x,*l_statbar_health_y, *l_statbar_health_w,*l_statbar_health_h, *l_statbar_health_bg_color, *l_statbar_logo_x,*l_statbar_logo_y; extern Cell *true_symbol; /* ------------------------- TRIGONOMETRY -------------------- */ #define FIXED_TRIG_SIZE 360 // 360 degrees stored in table extern int32_t sin_table[FIXED_TRIG_SIZE]; // this should be filled in by external module #define TBS 1662 // atan table granularity extern uint16_t atan_table[TBS]; /* ------------------------- COMPATIBILITY -------------------- */ typedef Cell lisp_symbol; #undef CAR #undef CDR #undef SCAR #undef SCDR #define SCAR(x) (((Cell*)x)->type == LI_tCONS ? ((Cell*)x)->v.cons.car : Nil) #define SCDR(x) (((Cell*)x)->type == LI_tCONS ? ((Cell*)x)->v.cons.cdr : Nil) #define CAR(x) (((Cell*)x)->v.cons.car) #define CDR(x) (((Cell*)x)->v.cons.cdr) /* ------------------------- FUNCTION PROTOTYPES ------------------------- */ void lisp_init (long a, long b); void lisp_uninit (void); char * lstring_value (void* x); long lnumber_value (void* x); char lcharacter_value (void* x); Cell* new_lisp_number (long x); Cell* new_lisp_character (unsigned short x); Cell* new_lisp_string (long x); Cell* new_lisp_pointer (void* x); Cell* new_cons_cell (void); Cell* lcar (void* x); Cell* lcdr (void* x); Cell* lprint (void* x); Cell* set_symbol_number (void* x, long y); Cell* set_symbol_value(void *symbol, void *value); Cell* symbol_value (void* x); Cell* make_find_symbol (char* name); Cell* find_symbol (char* name); Cell* symbol_function (void* symbol); void use_user_space(void *addr, long size); Cell* eval_function(void *sym, void *arg_list, void *env); void clear_tmp(); void resize_tmp (int size); Cell* eval (void* item, void* env); long list_length(void *i); Cell* nth (int num, void *list); Cell* compile (char*& str); int get_lprop_number (void* symbol, int number); Cell* assoc (void* vlists, void* vtarget); char* symbol_name (void* symbol); int item_type (void* cell); int32_t lisp_cos(int32_t x); int32_t lisp_sin(int32_t x); int32_t lisp_atan2(int32_t dy, int32_t dx); void push_onto_list(Cell *object, Cell *&list); void* lpointer_value (void* x); long lfixed_point_value(void* x); void lisp_init_globals (); int lisp_init_lisp_fns (); void lisp_init_c_fns (); extern "C" void lbreak (const char* format, ...); #endif /* _LISP_HPP_INCLUDED_ */