Annotation of cci/d/entry/movblk.c, revision 1.1.1.1

1.1       root        1: #define error_hdl1 error
                      2: #define error_str error
                      3: 
                      4: extern long scoplp;
                      5: extern long force_lp;
                      6: extern long ercode;
                      7: 
                      8: #define C      0x1
                      9: #define V      0x2
                     10: #define Z      0x4
                     11: #define N      0x8
                     12: 
                     13: /*     MOVBLK instruction      */
                     14: 
                     15: #define MAXLINE        100
                     16: #define NULL   0
                     17: 
                     18: /* Some global variables */
                     19: static long flag_msk, psl, len, r2;
                     20: static char *r1, *r0, *s_str;
                     21: 
                     22: asm(".align 2");
                     23: static char srcstr[MAXLINE], *srcptr;
                     24: 
                     25: asm(".align 2");
                     26: static char d_str[MAXLINE], *dstptr;
                     27: 
                     28: 
                     29: movblk()
                     30: {
                     31:        asm("movl       $3,_no_opr");
                     32:        mvblock();
                     33:        asm("jmp *return");
                     34: }
                     35: 
                     36: static mvblock()
                     37: {      
                     38:        long  exp_psw, ix, exp_r2;
                     39:        char *exp_r0, *exp_r1, *cptr;
                     40: 
                     41:        cptr = srcstr;
                     42:        for(ix=0;ix<95;ix++) {
                     43:                *cptr = ' ' + ix; /* make a long string */
                     44:                cptr++;
                     45:                }
                     46:        *cptr = '\0';
                     47:        exp_r2 = 0;
                     48: 
                     49:        setjmp();
                     50:        asm("m1:        movab   m1,_stpc");
                     51:        asm("movl       $1,_subtst");
                     52:        flag_msk = exp_psw = N|V|C;
                     53:        srcptr = (char *)(srcstr + 2);          /* source str begin at word */
                     54:        dstptr = (char *)(d_str + 3);           /* Dest. str begin at byte */
                     55:        len = 50;
                     56:        exp_r0 = srcptr + len;
                     57:        exp_r1 = dstptr + len;
                     58:        mvblk(exp_r0,exp_r1,exp_r2,exp_psw);
                     59: 
                     60:        setjmp();
                     61:        asm("m2:        movab   m2,_stpc");
                     62:        asm("movl       $2,_subtst");
                     63:        flag_msk = exp_psw =  Z;
                     64:        srcptr = srcstr;                        /* source str begin at lword */
                     65:        dstptr = (char *)(d_str + 2);           /* Dest. str begin at word */
                     66:        len = 94;
                     67:        exp_r0 = srcptr + len;
                     68:        exp_r1 = dstptr + len;
                     69:        mvblk(exp_r0,exp_r1,exp_r2,exp_psw);
                     70: 
                     71:        setjmp();
                     72:        asm("m3:        movab   m3,_stpc");
                     73:        asm("movl       $3,_subtst");
                     74:        flag_msk = exp_psw = N|Z|V|C;
                     75:        srcptr = (char *)(srcstr + 1);          /* source str begin at byte */
                     76:        dstptr = d_str;                         /* Dest. str begin at lword */
                     77:        len = 95;
                     78:        exp_r0 = srcptr + len;
                     79:        exp_r1 = dstptr + len;
                     80:        mvblk(exp_r0,exp_r1,exp_r2,exp_psw);
                     81: 
                     82: } 
                     83: 
                     84: static mvblk(exp_r0,exp_r1,exp_r2,exp_psw)
                     85: char *exp_r0, *exp_r1 ;
                     86: long exp_psw, exp_r2;
                     87: {
                     88:        char *msg1, *msg2, *str, saves[MAXLINE], *cptr1, *cptr2;
                     89:        int ix;
                     90:        long slen, len_op, psw;
                     91: 
                     92: flag_msk = flag_msk << 16;
                     93: len_op = len;
                     94: cptr1 = srcptr+len; cptr2 = dstptr+len;
                     95: *cptr1 = *cptr2 = NULL;
                     96: for(;;)
                     97:      {
                     98: 
                     99:        /* CLEAR DESTINATION STRING */
                    100:        cptr1 = d_str;
                    101:        for(ix=0;ix<MAXLINE;ix++) {
                    102:                *cptr1 = '^';
                    103:                cptr1++;
                    104:                }
                    105:        /* SAVE SOURCE STRING   */
                    106:        str = srcptr;
                    107:        cptr1 = saves;
                    108:        for(slen=0; slen<=len ;slen++) {
                    109:                *cptr1 = *str++;
                    110:                cptr1++;
                    111:                }
                    112:        /* set flags */
                    113:        len = len_op;
                    114:        asm("movl _srcptr,r0");
                    115:        asm("movl _dstptr,r1");
                    116:        asm("movl _len,r2");
                    117:        asm("bicpsw $0xf");             /* clear all flags */
                    118:        asm("bispsw _flag_msk");
                    119:        asm("movblk");
                    120:        asm("movpsl _psl");
                    121:        asm("movl r0,_r0");
                    122:        asm("movl r1,_r1");
                    123:        asm("movl r2,_r2");
                    124: 
                    125:        psw = psl & 0xf;
                    126: 
                    127:        /* check flags */
                    128:        if (psw != exp_psw)
                    129:                {
                    130:                ercode = 2;
                    131:                if (scoplp) longjmp();
                    132:                error_hdl1(psw,exp_psw,srcptr,dstptr,len);
                    133:                }
                    134: 
                    135:        /* CHECK IF SOURCE OPERANDS GET CHANGED */
                    136:        if (len != len_op)
                    137:                {
                    138:                ercode = 3;
                    139:                if (scoplp) longjmp();
                    140:                error_hdl1(len,len_op,srcptr,dstptr,len);
                    141:                }
                    142: 
                    143:        cptr1 = saves;
                    144:        cptr2 = srcptr;
                    145:        for(ix=0;ix<len;ix++)
                    146:                {
                    147:                if ((*cptr2) != (*cptr1)) 
                    148:                        {
                    149:                        ercode = 3;
                    150:                        if (scoplp) longjmp();
                    151:                        error_str(srcstr,saves,srcptr,dstptr,len);
                    152:                        }
                    153:                cptr1++; 
                    154:                cptr2++; 
                    155:                }
                    156: 
                    157:        /* CHECK DESTINATION STRING     */
                    158:        cptr1 = srcptr;
                    159:        cptr2 = dstptr;
                    160:        for(ix=0;ix<len;ix++)
                    161:                { 
                    162:                if ((*cptr1) != (*cptr2)) 
                    163:                        {
                    164:                        ercode = 3;
                    165:                        if (scoplp) longjmp();
                    166:                        error_str(d_str,srcstr,srcptr,dstptr,len);
                    167:                        }
                    168:                cptr1++; 
                    169:                cptr2++; 
                    170:                }
                    171: 
                    172:        cptr1 = dstptr+len+1;   
                    173:        if (((*cptr1) != '^') && ((*cptr1) != NULL))
                    174:                {
                    175:                ercode = 3;
                    176:                if (scoplp) longjmp();
                    177:                error_str(cptr1,dstptr+len+1,d_str,srcstr);
                    178:                }
                    179: 
                    180:        /* CHECK R0, R1, R2     */
                    181: 
                    182:        if (r0 != exp_r0)
                    183:                {
                    184:                ercode = 1;
                    185:                if (scoplp) longjmp();
                    186:                error_hdl1(r0,exp_r0,srcptr,dstptr,len);
                    187:                } 
                    188:        if (r1 != exp_r1)
                    189:                {
                    190:                ercode = 1;
                    191:                if (scoplp) longjmp();
                    192:                error_hdl1(r1,exp_r1,srcptr,dstptr,len);
                    193:                } 
                    194:        if (r2 != exp_r2)
                    195:                {
                    196:                ercode = 1;
                    197:                if (scoplp) longjmp();
                    198:                error_hdl1(r2,exp_r2,srcptr,dstptr,len);
                    199:                } 
                    200: /*             if (force_lp) longjmp();  */
                    201:                
                    202:        break;
                    203:     }
                    204: }
                    205: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.