kent@sparky.IMD.Sterling.COM (Kent Landfield) (01/03/91)
Submitted-by: rpj@pygmy.rice.edu (Richard Parvin Jernigan) Posting-number: Volume 16, Issue 4 Archive-name: mbase/part03 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: mbase.h stdinc.h sample.s # Wrapped by rpj@pygmy on Mon Dec 17 19:54:47 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'mbase.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mbase.h'\" else echo shar: Extracting \"'mbase.h'\" \(7063 characters\) sed "s/^X//" >'mbase.h' <<'END_OF_FILE' X/* ******************************************************************** * X *** unix compatible *** X * MetalBase 3.0.................................................... * X * * X * Multi-user simultaneous use of relations (On multi-user hardware) * X * Users may have many relations open at once, even the same one! * X * Unlimited length records (Really! Just redefine BUF_LEN!) * X * Up to 20 indicies per relation, 5 fields max per composite index * X * Up to 4.2 billion records per relation * X * Bizzare intermittent bugs, just like the expensive programs * X * And, unless they're weird, your kids will eat it * X * /\ * X * Written starting in August 1989, by Huan-Ti rj / \ * X * / \ * X * "Ye hath mushrooms for $1.99 a pound. Ye art \ / * X * truly a Calvinist." \ / tp * X * -- II Calvin 7:1 \/ * X *** *** X * ******************************************************************** */ X X#include "stdinc.h" X X#ifndef BUF_LEN /* Maximum possible needed buffer (Length = 1 + */ X#define BUF_LEN 256 /* record_length + 13*number_of_indicies */ X#endif /* If needed, redefine before #including */ X X#ifndef MAX_REL /* Maximum possible # of relations open at once, */ X#define MAX_REL 5 /* for this user. DOES NOT CHANGE STDIO'S # of */ X#endif /* FILES OPEN AT ONCE (#_of_rel + 3) */ X X#ifndef MAX_FLDS /* Maximum number of fields in any given */ X#define MAX_FLDS 30 /* relation. If you need more than 30, redefine */ X#endif /* before #including <mbase.h> */ X X#define OKAY 0 /* Generic no-problem number. Thank IBM. */ X#define NOT_ENOUGH_ROOM -1000 /* Too many files are open at once */ X#define CANNOT_OPEN_REL -1001 /* Can't open FILE.REL */ X#define RELATION_HUNG -1002 /* User left during add/del/upd. See dox */ X#define CANNOT_READ_REL -1003 /* FILE.REL is protected (Need rw access) */ X#define RELATION_BUSY -1004 /* 120 users on one relation=max (Hah!) */ X#define RELATION_LOCKED -1005 /* Someone has locked the relation */ X#define LOCK_DENIED -1006 /* Can't lock with other users. See dox */ X#define ILLEGAL_DUPLICATE -1007 /* Record would violate a nodups index */ X#define CORRUPT_INDEX -1008 /* Means you're fucked. Probly not used */ X#define INVALID_FILE_CODE -1009 /* You've passed an unreal relation numb */ X#define NOT_OPEN -1010 /* You've tried to work with a closed rel */ X#define RCD_INVALID -1011 /* Bad-size or # of flds given to add/upd */ X#define INVALID_COMP -1012 /* SELECT's record for comparison is bad */ X#define UNKNOWN_ACTION -1013 /* You'll probly never get this one. */ X#define NOT_FOUND -1014 /* Generic. Can't find the record U want */ X#define NO_CURRENT_RECORD -1015 /* Must select a record before del/upd */ X#define INVALID_INDEX -1016 /* A bad index # has been sent to mb_sel */ X X#define CURR 1 /* Re-read the current record (4 mb_sel) */ X#define EQUL 2 /* Get rec that matches exactly (see dox) */ X#define FRST 3 /* Get the first record, sequentially */ X#define GTEQ 4 /* If not exact, get the one right after */ X#define GTHN 5 /* Like GTEQ, but won't accept exact one */ X#define LAST 6 /* Get the last record, sequentially */ X#define LTEQ 7 /* If not exact, get the one right before */ X#define LTHN 8 /* Like LTEQ, but won't accept exact one */ X#define NEXT 9 /* Get the next record, sequentially */ X#define PREV 10 /* Get the previous record, sequentially */ X X#define CURRENT CURR /* These are included to reduce errors */ X#define EQUAL EQUL /* due to stupid humans who insist on */ X#define FIRST FRST /* using long words instead of short ones */ X#define GTHAN GTHN /* */ X#define LTHAN LTHN /* Gee, I'm considerate. */ X#define PREVIOUS PREV /* */ X X#define ZEROES "\001\001\001\001\001\001\001\001\001\001\001\001." X X/****************************************************************************/ X/* */ X/* A reminder of the single rule that applies to EVERYTHING in this file: */ X/* */ X/* If you don't understand it, DON'T SCREW WITH IT. */ X/* */ X/* I'd like to emphasize that this rule is _most_important_ in viewing the */ X/* follow section of definitions. If you wanna change the internal */ X/* structure of the relations, and think you can (successfully, that is), */ X/* go right ahead. And send me a copy of the "better" MetalBase when you */ X/* think you're finished... I'd like to see it. :-) */ X/* */ X/****************************************************************************/ X X#define _t_top(f,i) 4 + 4*i X#define _idxs(f) 13*(_list[f].num_idx) X#define _num_recs(f) 5 + 4*(_list[f].num_idx) X X#define _block(f) 11+(4*_list[f].num_idx) X#define _base(f,r) _block(f)+_list[f].relbase+(r-1)*((13*_list[f].num_idx)+\ X 2+(_list[f].rec_len)) X#define _l_ptr(f,i,r) _base (f, r) + 13*i X#define _r_ptr(f,i,r) _l_ptr (f, i, r) + 4 X#define _b_ptr(f,i,r) _r_ptr (f, i, r) + 4 X#define _rec(f,r) _base (f, r) + (13*_list[f].num_idx) + 1 X X#define _len(f) 2 + _idxs (f) + _list[f].rec_len X X/* Whew! */ X Xchar buffer [BUF_LEN]; X Xint _Started = -1; X X#define mb_key(a,b,c) _skey(a,b-1,c) X Xstruct X{ long int pos, relbase; X int relcode; X int num_idx, rec_len; X X int idx_dups [20]; X int idx_just [MAX_FLDS]; X int idx_num [20][6]; X int idx_start [20][6]; X int idx_stop [20][5]; X X char filename [80]; } _list [MAX_REL]; X END_OF_FILE if test 7063 -ne `wc -c <'mbase.h'`; then echo shar: \"'mbase.h'\" unpacked with wrong size! fi chmod +x 'mbase.h' # end of 'mbase.h' fi if test -f 'stdinc.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stdinc.h'\" else echo shar: Extracting \"'stdinc.h'\" \(588 characters\) sed "s/^X//" >'stdinc.h' <<'END_OF_FILE' X#ifndef STDINC_H X#define STDINC_H X X#include <stdio.h> X#include <fcntl.h> X X#ifndef AMIGA X#define UNIX X#define CLS "\033[2J\033[1;1H" /* ansi std */ X#else X#define CLS "\014" /* amiga std */ X#endif X X#define ANSI "\033[" X#define NORM "\033[0m" X#define BOLD "\033[1m" X#define SUBD "\033[2m" X#define ITAL "\033[3m" X#define UNDR "\033[4m" X#define INVR "\033[7m" X X#define sendchar(x) putchar ((char)(x)) X#define fix(x) ((x) < 0) ? ((x)+256) : (x) X#define until(x) while (!(x)) X X#ifndef MAX_RPT X#define MAX_RPT 240 X#endif X X#ifndef MAX_CUT X#define MAX_CUT 80 X#endif X X#endif X END_OF_FILE if test 588 -ne `wc -c <'stdinc.h'`; then echo shar: \"'stdinc.h'\" unpacked with wrong size! fi chmod +x 'stdinc.h' # end of 'stdinc.h' fi if test -f 'sample.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sample.s'\" else echo shar: Extracting \"'sample.s'\" \(243 characters\) sed "s/^X//" >'sample.s' <<'END_OF_FILE' Xrelation sample X Xfield question length 2 right ; Two chars is enough for 100 questions. ; Xfield noun length 20 Xfield goodbad length 1 X Xindex on noun Xindex on question|goodbad with duplicates Xindex on question with duplicates X Xend X END_OF_FILE if test 243 -ne `wc -c <'sample.s'`; then echo shar: \"'sample.s'\" unpacked with wrong size! fi chmod +x 'sample.s' # end of 'sample.s' fi echo shar: End of shell archive. exit 0 -- / (_________ The man with the hammer __________) \ "Lobbest-thou thy Holy ( ______ _______ ) Hand-Grenade of Antioch ) ( Richid rpj@owlnet.rice.edu ) ( towards thy foe..." '---` '---` --Monty Python, HG. exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.