/* File: loader_xsb.h ** Author(s): David S. Warren, Jiyang Xu ** Contact: xsb-contact@cs.sunysb.edu ** ** Copyright (C) The Research Foundation of SUNY, 1986, 1993-1998 ** Copyright (C) ECRC, Germany, 1990 ** ** XSB is free software; you can redistribute it and/or modify it under the ** terms of the GNU Library General Public License as published by the Free ** Software Foundation; either version 2 of the License, or (at your option) ** any later version. ** ** XSB is distributed in the hope that it will be useful, but WITHOUT ANY ** WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ** FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for ** more details. ** ** You should have received a copy of the GNU Library General Public License ** along with XSB; if not, write to the Free Software Foundation, ** Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ** ** $Id: loader_xsb.h,v 1.4 2000/04/29 21:53:55 kifer Exp $ ** */ #define REL_TAB_SIZE 32768 #define FOREIGN_NAMELEN 128 #define SHORT_LDOPTIONLEN 254 /* Data structures holding the compiled code */ struct index_block { struct index_block *next ; unsigned long size ; } ; typedef struct index_block index_hdr, * pindex ; #define SIZE_IDX_HDR (sizeof(index_hdr)) #define i_next(i) ((i)->next) #define i_size(i) ((i)->size) #define i_block(i) ((CPtr)((i)+1)) struct text_segment { struct text_segment * next ; struct text_segment * prev ; pindex index ; unsigned long size ; } ; typedef struct text_segment text_seg, seg_hdr, *pseg ; #define SIZE_SEG_HDR (sizeof(seg_hdr)) #define seg_hdr(s) ((s)-1) #define seg_next(s) (((s)-1)->next) #define seg_prev(s) (((s)-1)->prev) #define seg_index(s) (((s)-1)->index) #define seg_size(s) (((s)-1)->size) #define seg_text(s) ((CPtr)(s)) #define OBJ_WORD_SIZE 4 #define WORD_SIZE ( sizeof(Cell) ) /* Zoom the object file to fit actual word size */ #define ZOOM_FACTOR (WORD_SIZE / OBJ_WORD_SIZE) /************************************************************************/ /* */ /* fix_bb: fixes the byte-backwards problem. It is passed a pointer to */ /* a sequence of 4 bytes read in from a file as bytes. It then converts */ /* those bytes to represent a number. This code works for any machine, */ /* and makes the byte-code machine independent. */ /* */ /************************************************************************/ #define fix_bb(lptr) (cell((CPtr)(lptr)) = \ (((((Cell)(*(pb)(lptr)) << 8 | (Cell)(*((pb)(lptr)+1)))\ << 8) | (Cell)(*((pb)(lptr)+2))) << 8) | (Cell)(*((pb)(lptr)+3)) \ ) /* experimental */ #define fix_bb4(lptr) (*(unsigned int *)(lptr) = \ (((((unsigned int)(*(pb)(lptr)) \ << 8 | (unsigned int)(*((pb)(lptr)+1)))\ << 8) | (unsigned int)(*((pb)(lptr)+2)))\ << 8) | (unsigned int)(*((pb)(lptr)+3)) \ ) /* === functions used in other parts of the system ====================== */ extern byte *loader(char *, int); extern void env_type_set(Psc, byte, byte, xsbBool); extern void unload_seg(pseg); extern unsigned int read_magic(FILE *);