Code below was written to help compute formulas using Gaussian (finite field) hypergeometric series, truncated classical hypergeometric series, and related quantities. Since functions for this didn't seem to already exist, I coded them up (without much concern for run time) and posted them in case they might be useful to anyone else looking to compute values of these functions. Hopefully in copying and pasting and reformatting these for html nothing has been changed or deleted, but please let me know if there are any problems with the posted code.
Z:=Integers();
C:=ComplexField();

//the following two functions are called by gausshyper and others
//Jacobi sum over F_p p prime
function jacobi(A,B,p)
sum:=0;
for x in [0..p-1] do
sum:=sum+A(x)*B(1-x);
end for;
return sum;
end function;

//return character "binomial coefficient", B(-1)/p* J(A,\bar{b})
function bin(A,B,p)
j:=jacobi(A,B^(-1),p);
return (B(-1)/p)*j;
end function;

//returns GaussianHyper2F1(A,B;C|x)_p where A=T^((p-1)*pa)=1, etc
//note this requires p prime, for prime powers use gausshyperchar below (character definition)
function gausshyper(pa,pb,pc,x,p)
G:=FullDirichletGroup(p);
T:=Generators(G)[1];

A:=T^(Z!((p-1)*pa));
B:=T^(Z!((p-1)*pb));
C:=T^(Z!((p-1)*pc));

sum:=0;

for i in [1..p-1] do
chi:=T^i;
sum:=sum+bin(A*chi,chi,p)*bin(B*chi,C*chi,p)*chi(x);
end for;

return (p/(p-1))*sum;
end function;

//returns GaussianHyper3F2(A,B C;D, E|x)_p where A=T^((p-1)pa)=1, etc
function gausshyper32(pa,pb,pc,pd,pe,x,p)
G:=FullDirichletGroup(p);
T:=Generators(G)[1];

A:=T^(Z!((p-1)*pa));
B:=T^(Z!((p-1)*pb));
C:=T^(Z!((p-1)*pc));
D:=T^(Z!((p-1)*pd));
E:=T^(Z!((p-1)*pe));

sum:=0;
for i in [1..p-1] do
chi:=T^i;
sum:=sum+bin(A*chi,chi,p)*bin(B*chi,D*chi,p)*bin(C*chi, E*chi,p)*chi(x);
end for;
return (p/(p-1))*sum;
end function;

// same as gausshyper (p prime) but implementing via the character definition
// called by gausshyperchar when p is prime
function gausshypercharprime(pa, pb, pc, x, p)
G:=FullDirichletGroup(p);
T:=Generators(G)[1];

A:=T^(Z!((p-1)*pa));
B:=T^(Z!((p-1)*pb));
C:=T^(Z!((p-1)*pc));

if x eq 0 then
return 0;
else
sum:=0;
for y in [1..p-1] do
sum:=sum+ B(y)*(B^(-1)*C)(1-y)*(A^(-1))(1-x*y);
end for;
sum:=sum*(B*C)(-1)/p;
return sum;
end if;
end function;

//compute (p^exp)*2F1(A, B, C|x) over F_p^exp using character def
function gausshyperchar(pa,pb,pc,x,p,exp)
if x eq 0 then
return 0;
else
if exp eq 1 then
return p*gausshypercharprime(pa,pb,pc,Z!x,p);
else
F:=FiniteField(p^exp);
zetaA:=RootOfUnity(Denominator(pa))^(Numerator(pa));
zetaB:=RootOfUnity(Denominator(pb))^(Numerator(pb));
zetaC:=RootOfUnity(Denominator(pc))^(Numerator(pc));
g:=F.1;
sum:=0;
for y in F do
if y ne 0 and (1-y) ne 0 and (1-x*y) ne 0 then
t1:=Log(g,y);
t2:=Log(g,1-y);
t3:=Log(g,1-x*y);
sum:=sum+zetaB^t1*zetaB^(-t2)*zetaC^(t2)*zetaA^(-t3);

end if;
end for;
t:=Log(g,F!-1);
return ((zetaB^t*zetaC^t))*sum;
end if;
end if;
end function;

//return the order of p mod m, just exhaustively checking
//used to compute the Gauss sum below
function order(p,m)
for i in [1..m] do
if (p^i -1) mod m eq 0 then
return i;
end if;
end for;
return false;
end function;

//Gauss sum over F_q, q=p^f and character T^a
//use gaussfaster for large f to avoid constructing roots of unity
function gauss(a,p,f)
q:=p^f;
zetaq:=RootOfUnity(q-1);
zetap:=RootOfUnity(p);
F:=FiniteField(q);
if f gt 1 then
g:=F.1;
else
for t in [2..p-1] do
if order(t,p) eq (p-1) then
g:=F!t;
end if;
end for;
end if;
sum:=0;
for y in F do
if y ne 0 then
log:=Log(g,y);
sum:=sum+zetaq^(a*log)*zetap^(Z!Trace(y));
end if;
end for;
return sum;
end function;

//compute the gauss sum G(w^a), where w is generator and sum is over q=p^f  p prime
//use if numbers are large, just computes e^(2pi i) etc
function gaussfaster(a,p,f)
q:=p^f;
pi:=Pi(C);
zetaq:=Exp(2*pi*i/(q-1));
zetap:=Exp(2*pi*i/p);
F:=FiniteField(q);
if f gt 1 then
g:=F.1;
else
for t in [2..p-1] do
if order(t,p) eq (p-1) then
g:=F!t;
end if;
end for;
end if;
sum:=0;
for y in F do
if y ne 0 then
log:=Log(g,y);
sum:=sum+zetaq^(a*log)*zetap^(Z!Trace(y));
end if;
end for;
return sum;
end function;

//return the Pochhammer symbol (a)_n
//used to computer the truncated series below
function poch(a,n)
ps:=1;
for i in [0..n-1] do
ps:=ps*(a+i);
end for;
return ps;
end function;

//returns 2F1(a,b;c|z) truncated at m
function trunchyper(a,b,c,z,trunc)
if c eq 0 then
print "error div by 0";
return 0;
else
sum:=0;
for i in [0..trunc-1] do
sum:=sum+((poch(a,i)*poch(b,i))/(Factorial(i)*poch(c,i)))*z^i;
end for;
end if;
return sum;
end function;