--- /dev/null
+# ---?---
+#
+# $Id$
+#
+# Field abstraction
+#
+# (c) 2001 Straylight/Edgeware
+#
+
+#----- Licensing notice -----------------------------------------------------
+#
+# This file is part of the Perl interface to Catacomb.
+#
+# Catacomb/Perl is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Catacomb/Perl 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Catacomb/Perl; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+MODULE = Catacomb PACKAGE = Catacomb::Field PREFIX = field_
+
+Field *
+field_prime(me, p)
+ SV *me
+ mp *p
+ C_ARGS:
+ p
+
+Field *
+field_niceprime(me, p)
+ SV *me
+ mp *p
+ C_ARGS:
+ p
+
+Field *
+field_binpoly(me, p)
+ SV *me
+ gf *p
+ C_ARGS:
+ p
+
+Field *
+field_binnorm(me, p, beta)
+ SV *me
+ gf *p
+ gf *beta
+ C_ARGS:
+ p, beta
+
+Field *
+byname(me, str)
+ SV *me
+ char *str
+ PREINIT:
+ qd_parse qd;
+ CODE:
+ qd.e = 0;
+ qd.p = str;
+ if ((RETVAL = field_parse(&qd)) == 0)
+ croak("bad field spec: %s", qd.e);
+ else if (!qd_eofp(&qd)) {
+ F_DESTROY(RETVAL);
+ croak("junk at end of field spec");
+ }
+ OUTPUT:
+ RETVAL
+
+SV *
+DESTROY(f)
+ Field *f
+ CODE:
+ F_DESTROY(f);
+ XSRETURN_YES;
+
+char *
+name(f)
+ Field *f
+ CODE:
+ RETVAL = (char *)F_NAME(f);
+ OUTPUT:
+ RETVAL
+
+UV
+type(f)
+ Field *f
+ CODE:
+ RETVAL = F_TYPE(f);
+ OUTPUT:
+ RETVAL
+
+mp *
+zero(f)
+ Field *f
+ CODE:
+ RETVAL = MP_COPY(f->zero);
+ OUTPUT:
+ RETVAL
+
+mp *
+one(f)
+ Field *f
+ CODE:
+ RETVAL = MP_COPY(f->one);
+ OUTPUT:
+ RETVAL
+
+mp *
+m(f)
+ Field *f
+ CODE:
+ RETVAL = MP_COPY(f->m);
+ OUTPUT:
+ RETVAL
+
+UV
+nbits(f)
+ Field *f
+ CODE:
+ RETVAL = f->nbits;
+ OUTPUT:
+ RETVAL
+
+UV
+noctets(f)
+ Field *f
+ CODE:
+ RETVAL = f->noctets;
+ OUTPUT:
+ RETVAL
+
+mp *
+rand(f, r = &rand_global)
+ Field *f
+ grand *r
+ CODE:
+ RETVAL = F_RAND(f, MP_NEW, r);
+ OUTPUT:
+ RETVAL
+
+bool
+samep(f, ff)
+ Field *f
+ Field *ff
+ CODE:
+ RETVAL = F_SAMEP(f, ff);
+ OUTPUT:
+ RETVAL
+
+mp *
+in(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_IN(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+out(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_OUT(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+bool
+zerop(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_ZEROP(f, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+neg(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_NEG(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+add(f, x, y)
+ Field *f
+ mp *x
+ mp *y
+ CODE:
+ RETVAL = F_ADD(f, MP_NEW, x, y);
+ OUTPUT:
+ RETVAL
+
+mp *
+sub(f, x, y)
+ Field *f
+ mp *x
+ mp *y
+ CODE:
+ RETVAL = F_SUB(f, MP_NEW, x, y);
+ OUTPUT:
+ RETVAL
+
+mp *
+mul(f, x, y)
+ Field *f
+ mp *x
+ mp *y
+ CODE:
+ RETVAL = F_MUL(f, MP_NEW, x, y);
+ OUTPUT:
+ RETVAL
+
+mp *
+sqr(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_SQR(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+inv(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_INV(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+reduce(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_REDUCE(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+sqrt(f, x)
+ Field *f
+ mp *x
+ CODE:
+ RETVAL = F_SQRT(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+quadsolve(f, x)
+ Field *f
+ mp *x
+ CODE:
+ if (F_TYPE(f) != FTY_BINARY)
+ croak("quadsolve only works on binary fields");
+ RETVAL = F_QUADSOLVE(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+dbl(f, x)
+ Field *f
+ mp *x
+ CODE:
+ if (F_TYPE(f) != FTY_PRIME)
+ croak("dbl only works on prime fields");
+ RETVAL = F_DBL(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+tpl(f, x)
+ Field *f
+ mp *x
+ CODE:
+ if (F_TYPE(f) != FTY_PRIME)
+ croak("tpl only works on prime fields");
+ RETVAL = F_TPL(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+qdl(f, x)
+ Field *f
+ mp *x
+ CODE:
+ if (F_TYPE(f) != FTY_PRIME)
+ croak("qdl only works on prime fields");
+ RETVAL = F_QDL(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+
+mp *
+hlv(f, x)
+ Field *f
+ mp *x
+ CODE:
+ if (F_TYPE(f) != FTY_PRIME)
+ croak("hlv only works on prime fields");
+ RETVAL = F_HLV(f, MP_NEW, x);
+ OUTPUT:
+ RETVAL
+