ftp.nice.ch/pub/next/developer/languages/lisp/AKCL.1.599.s.tar.gz#/akcl-1-599/c/fasl_table.c

This is fasl_table.c in view mode; [Download] [Up]

/*
(C) Copyright Taiichi Yuasa and Masami Hagiya, 1984.  All rights reserved.
*/

/*
	fasl_table.c
	DG-SPECIFIC
*/

#include "include.h"
#include "../h/fasl.h"
#include "../h/fasl_global.h"

PART_TABLE_P
fasl_new_table()
{
	PART_TABLE_P	table_p;

	if (((max_part_no + 1) % FAS_TABLES_IN_REC) == 0) {
		/* assign new record */
		fasl_write_temp();
		fas_temp_curr = ++fas_temp_last;
		zero(fas_temp_buff, FAS_BUFF_LEN);
		}
		else
		/* there is a room in last record */
		if (fas_temp_curr != fas_temp_last) {
			fasl_write_temp();
			fasl_read_temp(fas_temp_last);
			}

	max_part_no++;
	table_p = (PART_TABLE_P)fas_temp_buff +
		  max_part_no % FAS_TABLES_IN_REC;
	table_p->part_no = max_part_no;
	return(table_p);
}

PART_TABLE_P
fasl_get_table(base)
short	base;
{
	int		rec_no;
	PART_TABLE_P	table_p;

	rec_no = base / FAS_TABLES_IN_REC;
	table_p = (PART_TABLE_P)fas_temp_buff +
		  base % FAS_TABLES_IN_REC;
	if (rec_no == fas_temp_curr) return(table_p);

	/* we must flush current buffer ? */
	if (fas_temp_flush == TRUE) fasl_write_temp();
	fasl_read_temp(rec_no);

	return(table_p);
}

int
fasl_get_addr(base)
{
	int	recno, ind;

	if (base == vs_base_no) return(&vs_base);
	if (base == vs_top_no) return(&vs_top);

	recno = base / FAS_ADDRS_IN_REC;
	ind = base % FAS_ADDRS_IN_REC;

	if (recno != fas_addr_rec_curr)
		fasl_read_addr_rec(recno);

	return( ((int *)fas_addr_buff)[ind] );
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.