add an abstraction layer separating out db-4 specific code
[nvi.git] / perl_api / typemap
blob1e0a43a7adb4d20481c337d13db5097820cd67e7
1 TYPEMAP
2 # Grr can't let it end in OBJ 'cause xsubpp would
3 # s/OBJ$/REF/ that for the DESTROY function
4 VI      T_VIOBJNOMUNGE
5 VI::OPT T_VIOBJREF
6 VI::MAP T_VIOBJREF
7 VI::MARK        T_VIOBJREF
8 VI::LINE        T_VIOBJREF
9 VI::TAGQ        T_VITAGQ
10 VI::TAGQ2       T_VITAGQ2
11 AVREF   T_AVREFREF
13 INPUT
14 T_AVREFREF
15         if (SvROK($arg) && SvTYPE(SvRV($arg)) == SVt_PVAV) 
16             $var = (AV *)SvRV($arg);
17         else
18             croak(\"$var is not a reference to an array\")
19 T_VIOBJNOMUNGE
20         if (sv_isa($arg, \"VI\")) {
21             IV tmp = SvIV((SV*)SvRV($arg));
22             $var = ($type) tmp;
23             if (!tmp)
24                 croak(\"screen no longer exists\");
25         }
26         else
27             croak(\"$var is not of type ${ntype}\")
28 T_VIOBJREF
29         if (sv_isa($arg, \"${ntype}\")) {
30             IV tmp = SvIV((SV*)SvRV($arg));
31             if (sv_isa((SV *)tmp, \"VI\")) {
32                 IV tmp2 = SvIV((SV*)SvRV((SV *)tmp));
33                 $var = ($type) tmp2;
34                 if (!tmp2)
35                     croak(\"screen no longer exists\");
36             }
37             else
38                 croak(\"$var is not of type ${ntype}\");
39         }
40         else
41             croak(\"$var is not of type ${ntype}\")
42 T_VITAGQ
43         if (sv_isa($arg, \"VI::TAGQ\")) {
44             $var = ($type) SvIV((SV*)SvRV($arg));
45             if ($var->tqp == 0)
46                 croak(\"Tag queue invalidated\");
47         } else
48             croak(\"$var is not of type ${ntype}\")
49 T_VITAGQ2
50         if (sv_isa($arg, \"VI::TAGQ\")) {
51             $var = ($type) SvIV((SV*)SvRV($arg));
52         } else
53             croak(\"$var is not of type ${ntype}\")
55 OUTPUT
56 T_VIOBJNOMUNGE
57         newVIrv($arg, $var);