[BACK]Return to strobj.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Annotation of OpenXM_contrib2/asir2000/builtin/strobj.c, Revision 1.4

1.4     ! noro        1: /* $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.3 2000/02/07 05:21:32 noro Exp $ */
1.1       noro        2: #include "ca.h"
                      3: #include "parse.h"
                      4: #include "ctype.h"
                      5: #if PARI
                      6: #include "genpari.h"
                      7: extern jmp_buf environnement;
                      8: #endif
                      9: extern char *parse_strp;
                     10:
                     11: void Prtostr(), Pstrtov(), Peval_str();
1.3       noro       12: void Pstrtoascii(), Pasciitostr();
1.1       noro       13:
                     14: struct ftab str_tab[] = {
                     15:        {"rtostr",Prtostr,1},
                     16:        {"strtov",Pstrtov,1},
                     17:        {"eval_str",Peval_str,1},
1.3       noro       18:        {"strtoascii",Pstrtoascii,1},
                     19:        {"asciitostr",Pasciitostr,1},
1.1       noro       20:        {0,0,0},
                     21: };
1.3       noro       22:
                     23: void Pstrtoascii(arg,rp)
                     24: NODE arg;
                     25: LIST *rp;
                     26: {
                     27:        STRING str;
                     28:        unsigned char *p;
                     29:        int len,i;
                     30:        NODE n,n1;
                     31:        Q q;
                     32:
                     33:        str = (STRING)ARG0(arg);
                     34:        asir_assert(str,O_STR,"strtoascii");
                     35:        p = BDY(str);
                     36:        len = strlen(p);
                     37:        for ( i = len-1, n = 0; i >= 0; i-- ) {
                     38:                UTOQ((unsigned int)p[i],q);
                     39:                MKNODE(n1,q,n);
                     40:                n = n1;
                     41:        }
                     42:        MKLIST(*rp,n);
                     43: }
                     44:
                     45: void Pasciitostr(arg,rp)
                     46: NODE arg;
                     47: STRING *rp;
                     48: {
                     49:        LIST list;
                     50:        unsigned char *p;
                     51:        int len,i,j;
                     52:        NODE n;
                     53:        Q q;
                     54:
                     55:        list = (LIST)ARG0(arg);
                     56:        asir_assert(list,O_LIST,"asciitostr");
                     57:        n = BDY(list);
                     58:        len = length(n);
                     59:        p = MALLOC_ATOMIC(len+1);
                     60:        for ( i = 0; i < len; i++, n = NEXT(n) ) {
                     61:                q = (Q)BDY(n);
                     62:                asir_assert(q,O_N,"asciitostr");
                     63:                j = QTOS(q);
1.4     ! noro       64:                if ( j >= 256 || j <= 0 )
1.3       noro       65:                        error("asciitostr : argument out of range");
                     66:                p[i] = j;
                     67:        }
                     68:        p[i] = 0;
                     69:        MKSTR(*rp,(char *)p);
                     70: }
1.1       noro       71:
                     72: void Peval_str(arg,rp)
                     73: NODE arg;
                     74: Obj *rp;
                     75: {
                     76:        FNODE fnode;
                     77:        char *cmd;
                     78: #if PARI
                     79:        recover(0);
                     80:        if ( setjmp(environnement) ) {
                     81:                avma = top; recover(1);
                     82:                resetenv("");
                     83:        }
                     84: #endif
                     85:        cmd = BDY((STRING)ARG0(arg));
                     86:        exprparse(0,cmd,&fnode);
                     87:        *rp = eval(fnode);
                     88: }
                     89:
                     90: void Prtostr(arg,rp)
                     91: NODE arg;
                     92: STRING *rp;
                     93: {
                     94:        char *b;
                     95:        int len;
                     96:
1.2       noro       97:        len = estimate_length(CO,ARG0(arg));
1.1       noro       98:        b = (char *)MALLOC(len+1);
                     99:        soutput_init(b);
                    100:        sprintexpr(CO,ARG0(arg));
                    101:        MKSTR(*rp,b);
                    102: }
                    103:
                    104: void Pstrtov(arg,rp)
                    105: NODE arg;
                    106: P *rp;
                    107: {
                    108:        char *p,*t;
                    109:
                    110:        p = BDY((STRING)ARG0(arg));
                    111: #if 0
                    112:        if ( !islower(*p) )
                    113:                *rp = 0;
                    114:        else {
                    115:                for ( t = p+1; t && (isalnum(*t) || *t == '_'); t++ );
                    116:                if ( *t )
                    117:                        *rp = 0;
                    118:                else
                    119:                        makevar(p,rp);
                    120:        }
                    121: #else
                    122:        makevar(p,rp);
                    123: #endif
                    124: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>