File : ffa_calc.ads


   1 ------------------------------------------------------------------------------
   2 ------------------------------------------------------------------------------
   3 -- This file is part of 'Finite Field Arithmetic', aka 'FFA'.               --
   4 --                                                                          --
   5 -- (C) 2019 Stanislav Datskovskiy ( www.loper-os.org )                      --
   6 -- http://wot.deedbot.org/17215D118B7239507FAFED98B98228A001ABFFC7.html     --
   7 --                                                                          --
   8 -- You do not have, nor can you ever acquire the right to use, copy or      --
   9 -- distribute this software ; Should you use this software for any purpose, --
  10 -- or copy and distribute it to anyone or in any manner, you are breaking   --
  11 -- the laws of whatever soi-disant jurisdiction, and you promise to         --
  12 -- continue doing so for the indefinite future. In any case, please         --
  13 -- always : read and understand any software ; verify any PGP signatures    --
  14 -- that you use - for any purpose.                                          --
  15 --                                                                          --
  16 -- See also http://trilema.com/2015/a-new-software-licensing-paradigm .     --
  17 ------------------------------------------------------------------------------
  18 ------------------------------------------------------------------------------
  19 
  20 with Limits;   use Limits;
  21 with FFA_RNG;  use FFA_RNG;
  22 
  23 
  24 package FFA_Calc is
  25    
  26    -- Peh Tapes:
  27    subtype Peh_Tape_Range is Positive range 1 .. Max_Peh_TapeSpace;
  28    type Peh_Tapes is array(Peh_Tape_Range range <>) of Character;
  29    
  30    -- Possible Verdicts of a non-erroneous Peh Tape run:
  31    type Peh_Verdicts is (Yes, No, Mu);
  32    
  33    -- Operator-Selectable Spatial and Time Dimensions of a Peh Machine:
  34    type Peh_Dimensions is
  35       record
  36          Width     : Positive;
  37          Height    : Positive;
  38          TapeSpace : Peh_Tape_Range;
  39          Life      : Natural;
  40       end record;
  41    
  42    -- Valid indices into the Control Stack:
  43    subtype ControlStack_Range is Natural range 0 .. Peh_Control_Stack_Size;
  44    -- The 'zero' position, as with the Data Stack, indicates 'emptiness'
  45    -- when pointed to by CSP ( see ffa_calc.adb ) and is never accessed.
  46    
  47    -- Valid indices into the Subroutine Table:
  48    subtype Subroutine_Table_Range is Natural range 0 .. Subroutine_Table_Size;
  49    -- The 'zero' position indicates 'emptiness', as in the above.
  50    
  51    -- Ensure that requested Peh Dimensions are permissible. Terminate if not.
  52    procedure Validate_Peh_Dimensions(Dimensions : in Peh_Dimensions);
  53    
  54    -- Start a Peh Machine with the given Dimensions and Tape; return a Verdict.
  55    function Peh_Machine(Dimensions : in Peh_Dimensions;
  56                         Tape       : in Peh_Tapes;
  57                         RNG        : in RNG_Device) return Peh_Verdicts;
  58    
  59 end FFA_Calc;