Annotation of 43BSD/contrib/dipress/src/bin/stackres/execute.c, revision 1.1

1.1     ! root        1: /* execute.c
        !             2:  *
        !             3:  * Copyright (c) 1984, 1985 Xerox Corp.
        !             4:  *
        !             5:  *  Define the functions used in parse.c.
        !             6:  *
        !             7:  * Execute the RES file and leave the correct parameters on the stack.
        !             8:  *
        !             9:  */
        !            10: 
        !            11: #include <math.h>
        !            12: #include <stdio.h>
        !            13: #include <iptokens.h>
        !            14: #include "stack.h"
        !            15: 
        !            16: #define RES_header "Interpress/Xerox/2.1/RasterEncoding/1.0 "
        !            17: #define len_RES_header 40
        !            18: 
        !            19: #define err0 "(%d) execute: Bad RES header, got %s\n"
        !            20: #define err1 "(%d) execute: roll moveFirst > depth, %d > %d!\n"
        !            21: #define err2 "(%d) execute: unknown operator subtype, got %d!\n"
        !            22: #define err3 "(%d) execute: unknown operator, type=%d!\n"
        !            23: #define err4 "(%d) execute: unknown sequence, type=%d, length=%d!\n"
        !            24: #define err5 "(%d) execute: sequenceInsertFile not implemented!\n"
        !            25: 
        !            26: 
        !            27: /* Defined elsewhere. */
        !            28: extern unsigned char **malloc();
        !            29: extern long filepos;
        !            30: extern FILE *fp;
        !            31: 
        !            32: /* Defined in this module. */
        !            33: extern unsigned char *decompressID();
        !            34: extern unsigned char *decompressOP();
        !            35: extern unsigned char *imagedata();
        !            36: extern unsigned char *popidentifier();
        !            37: extern double popdouble();
        !            38: 
        !            39: 
        !            40: /*
        !            41:  * Public procedures defined for "parse" module.
        !            42:  *
        !            43:  */
        !            44: 
        !            45: header(string, resheader)
        !            46:   {
        !            47:   if (strcmp(string, RES_header) != 0) error(err0, filepos, string);
        !            48:   }
        !            49: 
        !            50: op_makevec()
        !            51:   {
        !            52:   int n, depth;
        !            53:   unsigned char *ptr, **array;
        !            54:   depth = popint();
        !            55:   array = malloc((depth+1)*sizeof(unsigned char *));   /* null terminated array */
        !            56:   for (n=0; n < depth; n++) array[depth-n-1] = pop(0);
        !            57:   array[depth] = (unsigned char *) 0;
        !            58:   ptr = makevector(array, type_vector, subtype_general);
        !            59:   for (n=0; n < depth; n++) free(array[n]);
        !            60:   free(array);
        !            61:   push(ptr);
        !            62:   }
        !            63: 
        !            64: op_pop()
        !            65:   {
        !            66:   free(pop(0));
        !            67:   }
        !            68: 
        !            69: op_copy()
        !            70:   {
        !            71:   int n, depth;
        !            72:   unsigned char *ptr, **temp1, **temp2;
        !            73:   depth = popint();
        !            74:   temp1 = malloc(depth*sizeof(unsigned char *));
        !            75:   temp2 = malloc(depth*sizeof(unsigned char *));
        !            76:   for (n=0; n < depth; n++) temp1[depth-n-1] = pop(0);
        !            77:   for (n=0; n < depth; n++) temp2[n] = duplicate(temp1[n]);
        !            78:   for (n=0; n < depth; n++) push(temp1[n]);
        !            79:   for (n=0; n < depth; n++) push(temp2[n]);
        !            80:   free(temp1);
        !            81:   free(temp2);
        !            82:   }
        !            83: 
        !            84: op_dup()
        !            85:   {
        !            86:   unsigned char *ptr, *newptr;
        !            87:   ptr = pop(0);
        !            88:   newptr = duplicate(ptr);
        !            89:   push(ptr);
        !            90:   push(newptr);
        !            91:   }
        !            92: 
        !            93: op_roll()
        !            94:   {
        !            95:   int n, depth, moveFirst;
        !            96:   unsigned char *ptr, **temp;
        !            97:   moveFirst = popint();
        !            98:   depth = popint();
        !            99:   if (moveFirst > depth) error(err1, filepos, moveFirst, depth);
        !           100:   temp = malloc(depth*sizeof(unsigned char *));
        !           101:   for (n=0; n < depth; n++) temp[depth-n-1] = pop(0);
        !           102:   for (n=moveFirst; n < depth; n++) push(temp[n]);
        !           103:   for (n=0; n < moveFirst; n++) push(temp[n]);
        !           104:   free(temp);
        !           105:   }
        !           106: 
        !           107: op_exch()
        !           108:   {
        !           109:   unsigned char *temp1, *temp2;
        !           110:   temp1 = pop(0);
        !           111:   temp2 = pop(0);
        !           112:   push(temp1);
        !           113:   push(temp2);
        !           114:   }
        !           115: 
        !           116: op_nop()
        !           117:   {
        !           118:   }
        !           119: 
        !           120: op_translate()
        !           121:   {
        !           122:   double x, y;
        !           123:   unsigned char *ptr;
        !           124:   y = popdouble();
        !           125:   x = popdouble();
        !           126:   ptr = maketransformation(1.0, 0.0, x, 0.0, 1.0, y);
        !           127:   push(ptr);
        !           128:   }
        !           129: 
        !           130: op_rotate()
        !           131:   {
        !           132:   double angle, cosA, sinA, pi;
        !           133:   unsigned char *ptr;
        !           134:   angle = popdouble();
        !           135:   angle = 3.1415926*angle/180.;
        !           136:   cosA = cos(angle);
        !           137:   sinA = sin(angle);
        !           138:   ptr = maketransformation(cosA, -sinA, 0.0, sinA, cosA, 0.0);
        !           139:   push(ptr);
        !           140:   }
        !           141: 
        !           142: op_scale()
        !           143:   {
        !           144:   unsigned char *ptr;
        !           145:   double s;
        !           146:   s = popdouble();
        !           147:   ptr = maketransformation(s, 0.0, 0.0, 0.0, s, 0.0);
        !           148:   push(ptr);
        !           149:   }
        !           150: 
        !           151: op_scale2()
        !           152:   {
        !           153:   unsigned char *ptr;
        !           154:   double sx, sy;
        !           155:   sy = popdouble();
        !           156:   sx = popdouble();
        !           157:   ptr = maketransformation(sx, 0.0, 0.0, 0.0, sy, 0.0);
        !           158:   push(ptr);
        !           159:   }
        !           160: 
        !           161: op_concat()
        !           162:   {
        !           163:   double a, b, c, d, e, f;
        !           164:   unsigned char *ptr, *nptr, *mptr;
        !           165:   double *m, *n;
        !           166:   nptr = pop(type_transformation, 0);
        !           167:   mptr = pop(type_transformation, 0);
        !           168:   n = gettransformation(nptr);
        !           169:   m = gettransformation(mptr);
        !           170:   a = m[0]*n[0]+m[3]*n[1];
        !           171:   b = m[1]*n[0]+m[4]*n[1];
        !           172:   c = m[2]*n[0]+m[5]*n[1]+n[2];
        !           173:   d = m[0]*n[3]+m[3]*n[4];
        !           174:   e = m[1]*n[3]+m[4]*n[4];
        !           175:   f = m[2]*n[3]+m[5]*n[4]+n[5];
        !           176:   ptr = maketransformation(a, b, c, d, e, f);
        !           177:   free(mptr);
        !           178:   free(nptr);
        !           179:   free(m);
        !           180:   free(n);
        !           181:   push(ptr);
        !           182:   }
        !           183: 
        !           184: op_makepixelarray()
        !           185:   {
        !           186:   int n;
        !           187:   unsigned char *ptr, **array;
        !           188:   array = malloc(9*sizeof(unsigned char *));
        !           189:   array[6] = pop(type_vector, 0);                 /* samples */
        !           190:   array[5] = pop(type_transformation, 0);         /* m */
        !           191:   array[4] = pop(type_number, 0);                 /* samplesInterleaved */
        !           192:   array[3] = pop(type_number | type_vector, 0);   /* maxSampleValue */
        !           193:   array[2] = pop(type_number, 0);                 /* samplesPerPixel */
        !           194:   array[1] = pop(type_number, 0);                 /* yPixels */
        !           195:   array[0] = pop(type_number, 0);                 /* xPixels */
        !           196:   array[7] = makeselect(getint(array[2]), ~0);    /* select == all samples */
        !           197:   array[8] = (unsigned char *) 0;                 /* null terminated list */
        !           198:   ptr = makepixelarray(array);
        !           199:   for (n=0; n < 9; n++) free(array[n]);
        !           200:   free(array);
        !           201:   push(ptr);
        !           202:   }
        !           203: 
        !           204: 
        !           205: op_extractpixelarray()
        !           206:   {
        !           207:   int depth;
        !           208:   unsigned char *oldptr, *newptr, *select, **array;
        !           209:   select = pop(type_vector, 0);
        !           210:   oldptr = pop(type_pixelarray, 0);
        !           211:   array = getpixelarray(oldptr);
        !           212:   array[7] = select;
        !           213:   newptr = makepixelarray(array);
        !           214:   free(select);
        !           215:   free(oldptr);
        !           216:   free(array);
        !           217:   push(newptr);
        !           218:   }
        !           219: 
        !           220: op_do()
        !           221:   {
        !           222:   unsigned char *ptr, **array;
        !           223:   int type, subtype;
        !           224:   array = malloc(3*sizeof(unsigned char *));
        !           225:   array[0] = pop(type_operator, 0);           /* operator to do */
        !           226:   array[1] = pop(type_vector, 0);             /* vector argument */
        !           227:   array[2] = (unsigned char *) 0;
        !           228:   switch (getsubtype(array[0]))
        !           229:     {
        !           230:     case subtype_decompressop:
        !           231:       type = type_vector;
        !           232:       subtype = subtype_samples;
        !           233:       break;
        !           234:     case subtype_colorop:
        !           235:       type = type_color;
        !           236:       subtype = subtype_operator;
        !           237:       break;
        !           238:     case subtype_colormodelop:
        !           239:       type = type_operator;
        !           240:       subtype = subtype_colorop;
        !           241:       break;
        !           242:     default:
        !           243:       error(err2, filepos, getsubtype(array[0]));
        !           244:     }
        !           245:   ptr = makevector(array, type, subtype);
        !           246:   free(array[0]);
        !           247:   free(array[1]);
        !           248:   free(array);
        !           249:   push(ptr);
        !           250:   }
        !           251: 
        !           252: op_finddecompressor()
        !           253:   {
        !           254:   unsigned char *ptr, **array;
        !           255:   array = malloc(2*sizeof(unsigned char *));
        !           256:   array[0] = popidentifier("decompressionOps/");
        !           257:   array[1] = (unsigned char *) 0;
        !           258:   ptr = makeoperator(array, subtype_decompressop);
        !           259:   free(array[0]);
        !           260:   free(array);
        !           261:   push(ptr);
        !           262:   }
        !           263: 
        !           264: op_makegray()
        !           265:   {
        !           266:   unsigned char *ptr, **array;
        !           267:   array = malloc(2*sizeof(unsigned char *));
        !           268:   array[0] = pop(type_number);
        !           269:   array[1] = (unsigned char *) 0;
        !           270:   ptr = makecolor(array, subtype_value);
        !           271:   push(ptr);
        !           272:   }
        !           273: 
        !           274: op_findcolor()
        !           275:   {
        !           276:   unsigned char *ptr, **array;
        !           277:   array = malloc(2*sizeof(unsigned char *));
        !           278:   array[0] = popidentifier("colors/");
        !           279:   array[1] = (unsigned char *) 0;
        !           280:   ptr = makecolor(array, subtype_name);
        !           281:   free(array[0]);
        !           282:   free(array);
        !           283:   push(ptr);
        !           284:   }
        !           285: 
        !           286: op_findcoloroperator()
        !           287:   {
        !           288:   unsigned char *ptr, **array;
        !           289:   array = malloc(2*sizeof(unsigned char *));
        !           290:   array[0] = popidentifier("colorOps/");
        !           291:   array[1] = (unsigned char *) 0;
        !           292:   ptr = makeoperator(array, subtype_colorop);
        !           293:   free(array[0]);
        !           294:   free(array);
        !           295:   push(ptr);
        !           296:   }
        !           297: 
        !           298: op_findcolormodeloperator()
        !           299:   {
        !           300:   unsigned char *ptr, **array;
        !           301:   array = malloc(2*sizeof(unsigned char *));
        !           302:   array[0] = popidentifier("colorModelOps/");
        !           303:   array[1] = (unsigned char *) 0;
        !           304:   ptr = makeoperator(array, subtype_colormodelop);
        !           305:   free(array[0]);
        !           306:   free(array);
        !           307:   push(ptr);
        !           308:   }
        !           309: 
        !           310: op_beginblock()
        !           311:   {
        !           312:   }
        !           313: 
        !           314: op_endblock()
        !           315:   {
        !           316:   }
        !           317: 
        !           318: op_unknown(op)
        !           319:   int op;
        !           320:   {
        !           321:   error(err3, filepos, op);
        !           322:   }
        !           323: 
        !           324: seq_comment(nbytes)
        !           325:   int nbytes;
        !           326:   {
        !           327:   fseek(fp, (long) nbytes, 1);
        !           328:   }
        !           329: 
        !           330: seq_continued(nbytes, last)
        !           331:   int nbytes, last;
        !           332:   {
        !           333:   switch (last)
        !           334:     {
        !           335:     case sequenceAdaptivePixelVector:
        !           336:     case sequenceCompressedPixelVector:
        !           337:     case sequencePackedPixelVector:
        !           338:     case sequenceLargeVector:            extendpixel(nbytes);             break;
        !           339:     case sequenceComment:                fseek(fp, (long) nbytes, 1);     break;
        !           340:     case sequenceInteger:
        !           341:     case sequenceRational:               extendnumber(nbytes);            break;
        !           342:     case sequenceString:
        !           343:     case sequenceIdentifier:             extendstring(nbytes);            break;
        !           344:     default:                             error(err4, filepos, last, nbytes);
        !           345:     }
        !           346:   }
        !           347: 
        !           348: seq_insertfile(nbytes)
        !           349:   int nbytes;
        !           350:   {
        !           351:   error(err5, filepos);
        !           352:   }
        !           353: 
        !           354: seq_largevector(nbytes)
        !           355:   int nbytes;
        !           356:   {
        !           357:   int b;
        !           358:   long bytepos, bytelength;
        !           359:   unsigned char *ptr, **array;
        !           360:   b = getc(fp) & 0377;    /* read the number of bytes/integer. */
        !           361:   bytepos = ftell(fp);
        !           362:   bytelength = nbytes-1;
        !           363:   array = malloc(2*sizeof(unsigned char *));
        !           364:   array[0] = makeintegers(b, bytepos, bytelength);
        !           365:   array[1] = (unsigned char *) 0;
        !           366:   ptr = makevector(array, type_vector, subtype_integers);
        !           367:   fseek(fp, bytelength, 1);
        !           368:   free(array[0]);
        !           369:   free(array);
        !           370:   push(ptr);
        !           371:   }
        !           372: 
        !           373: 
        !           374: seq_adaptivepixel(nbytes)
        !           375:   int nbytes;
        !           376:   {
        !           377:   pushpixel(nbytes, "adaptive");
        !           378:   }
        !           379: 
        !           380: seq_compressedpixel(nbytes)
        !           381:   int nbytes;
        !           382:   {
        !           383:   pushpixel(nbytes, "compressed");
        !           384:   }
        !           385: 
        !           386: seq_packedpixel(nbytes)
        !           387:   int nbytes;
        !           388:   {
        !           389:   pushpixel(nbytes, "packed");
        !           390:   }
        !           391: 
        !           392: seq_identifier(nbytes)
        !           393:   int nbytes;
        !           394:   {
        !           395:   pushstring(nbytes, subtype_identifier);
        !           396:   }
        !           397: 
        !           398: seq_string(nbytes)
        !           399:   int nbytes;
        !           400:   {
        !           401:   pushstring(nbytes, subtype_string);
        !           402:   }
        !           403: 
        !           404: seq_unknown(type, nbytes)
        !           405:   int type, nbytes;
        !           406:   {
        !           407:   error(err4, filepos, type, nbytes);
        !           408:   }
        !           409:  
        !           410: seq_integer(nbytes)
        !           411:   int nbytes;
        !           412:   {
        !           413:   pushinteger(nbytes, subtype_integer);
        !           414:   }
        !           415: 
        !           416: seq_rational(nbytes)
        !           417:   int nbytes;
        !           418:   {
        !           419:   pushinteger(nbytes, subtype_rational);
        !           420:   }
        !           421: 
        !           422: shortnum(number)
        !           423:   int number;
        !           424:   {
        !           425:   unsigned char value[2];
        !           426:   unsigned char *ptr;
        !           427:   value[0] = (number >> 8) & 0377;
        !           428:   value[1] = number & 0377;
        !           429:   ptr = makenumber(2, value, subtype_integer);
        !           430:   push(ptr);
        !           431:   }
        !           432: 
        !           433: 
        !           434: /*
        !           435:  * Private procedures to this module.
        !           436:  *
        !           437:  */
        !           438: 
        !           439: static pushinteger(nbytes, subtype)
        !           440:   int nbytes, subtype;
        !           441:   {
        !           442:   int n;
        !           443:   unsigned char *ptr;
        !           444:   unsigned char *array;
        !           445:   array = (unsigned char *) malloc(nbytes);
        !           446:   for (n=0; n < nbytes; n++) array[n] = getc(fp) & 0377;
        !           447:   ptr = makenumber(nbytes, array, subtype);
        !           448:   free(array);
        !           449:   push(ptr);
        !           450:   }
        !           451: 
        !           452: static pushstring(nbytes, subtype)
        !           453:   int nbytes, subtype;
        !           454:   {
        !           455:   int n;
        !           456:   unsigned char *ptr;
        !           457:   char *string;
        !           458:   string = (char *) malloc(nbytes+1);
        !           459:   for (n=0; n < nbytes; n++) string[n] = getc(fp) & 0377;
        !           460:   string[nbytes] = (char) 0;
        !           461:   ptr = makestring(string, subtype);
        !           462:   free(string);
        !           463:   push(ptr);
        !           464:   }
        !           465: 
        !           466: static pushpixel(nbytes, compression)
        !           467:   int nbytes;
        !           468:   char *compression;
        !           469:   {
        !           470:   extern unsigned char *decompressID();
        !           471:   extern unsigned char *decompressOP();
        !           472:   extern unsigned char *imagedata();
        !           473:   unsigned char *ptr, *idvec, **array;
        !           474:   idvec = decompressID(compression);
        !           475:   array = malloc(3*sizeof(unsigned char *));
        !           476:   array[0] = decompressOP(idvec);
        !           477:   array[1] = imagedata(nbytes);
        !           478:   array[2] = (unsigned char *) 0;
        !           479:   ptr = makevector(array, type_vector, subtype_samples);
        !           480:   free(idvec);
        !           481:   free(array[0]);
        !           482:   free(array[1]);
        !           483:   free(array);
        !           484:   push(ptr);
        !           485:   }
        !           486: 
        !           487: static unsigned char *decompressID(compression)
        !           488:   char *compression;
        !           489:   {
        !           490:   unsigned char *ptr, **array;
        !           491:   array = malloc(3*sizeof(unsigned char *));
        !           492:   array[0] = makestring("xerox", subtype_identifier);
        !           493:   array[1] = makestring(compression, subtype_identifier);
        !           494:   array[2] = (unsigned char *) 0;
        !           495:   ptr = makevector(array, type_vector, subtype_general);
        !           496:   free(array[0]);
        !           497:   free(array[1]);
        !           498:   free(array);
        !           499:   return(ptr);
        !           500:   }
        !           501: 
        !           502: static unsigned char *decompressOP(idvec)
        !           503:   unsigned char *idvec;
        !           504:   {
        !           505:   unsigned char *ptr, **array;
        !           506:   array = malloc(2*sizeof(unsigned char *));
        !           507:   array[0] = makeidentifier(idvec, "decompressionOps/");
        !           508:   array[1] = (unsigned char *) 0;
        !           509:   ptr = makeoperator(array, subtype_decompressop);
        !           510:   free(array[0]);
        !           511:   free(array);
        !           512:   return(ptr);
        !           513:   }
        !           514: 
        !           515: static unsigned char *imagedata(nbytes)
        !           516:   int nbytes;
        !           517:   {
        !           518:   long bytepos, bytelength;
        !           519:   unsigned char *ptr, **array;
        !           520:   bytepos = ftell(fp);
        !           521:   bytelength = nbytes;
        !           522:   array = malloc(2*sizeof(unsigned char *));
        !           523:   array[0] = makeintegers(2, bytepos, bytelength);
        !           524:   array[1] = (unsigned char *) 0;
        !           525:   ptr = makevector(array, type_vector, subtype_integers);
        !           526:   fseek(fp, bytelength, 1);
        !           527:   free(array[0]);
        !           528:   free(array);
        !           529:   return(ptr);
        !           530:   }
        !           531: 
        !           532: static popint()
        !           533:   {
        !           534:   int result;
        !           535:   unsigned char *ptr;
        !           536:   ptr = pop(type_number, 0);
        !           537:   result = getint(ptr);
        !           538:   free(ptr);
        !           539:   return(result);
        !           540:   }
        !           541:  
        !           542: static double popdouble()
        !           543:   {
        !           544:   double result;
        !           545:   unsigned char *ptr;
        !           546:   ptr = pop(type_number, 0);
        !           547:   result = getdouble(ptr);
        !           548:   free(ptr);
        !           549:   return(result);
        !           550:   }
        !           551:  
        !           552: static unsigned char *popidentifier(prefix)
        !           553:   char *prefix;   /* should end with '/' character */
        !           554:   {
        !           555:   unsigned char *ptr, *composite;
        !           556:   ptr = pop(type_vector, subtype_general);
        !           557:   composite = makeidentifier(ptr, prefix);
        !           558:   free(ptr);
        !           559:   return(composite);
        !           560:   }
        !           561: 
        !           562: static extendpixel(nbytes)
        !           563:   int nbytes;
        !           564:   {
        !           565:   int n, depth;
        !           566:   long bytepos, bytelength;
        !           567:   unsigned char *ptr, **samplesarray, **integersarray;
        !           568:   unsigned char *newptr, **newarray;
        !           569:   ptr = pop(type_vector, subtype_samples);
        !           570:   samplesarray = getvector(ptr);
        !           571:   depth = getdepth(samplesarray[1]);
        !           572:   integersarray = getvector(samplesarray[1]);
        !           573:   newarray = malloc((depth+2)*sizeof(unsigned char *));
        !           574:   for (n=0; n < depth; n++) newarray[n] = integersarray[n];
        !           575:   bytepos = ftell(fp);
        !           576:   bytelength = nbytes;
        !           577:   newarray[depth] = makeintegers(2, bytepos, bytelength);
        !           578:   newarray[depth+1] = (unsigned char *) 0;
        !           579:   samplesarray[1] = makevector(newarray, type_vector, subtype_integers);
        !           580:   newptr = makevector(samplesarray, type_vector, subtype_samples);
        !           581:   fseek(fp, bytelength, 1);
        !           582:   free(ptr);
        !           583:   free(newarray[depth]);
        !           584:   free(samplesarray[1]);
        !           585:   free(samplesarray);
        !           586:   free(integersarray);
        !           587:   free(newarray);
        !           588:   push(newptr);
        !           589:   }
        !           590: 
        !           591: static extendnumber(nbytes)
        !           592:   int nbytes;
        !           593:   {
        !           594:   int n, len;
        !           595:   unsigned char *number, *newnumber;
        !           596:   unsigned char *ptr, *newptr;
        !           597:   ptr = pop(type_number, subtype_integer | subtype_rational);
        !           598:   number = getnumber(ptr);
        !           599:   len = getnumlen(ptr);
        !           600:   newnumber = (unsigned char *) malloc(len+nbytes);
        !           601:   for (n=0; n < len; n++) newnumber[n] = number[n];
        !           602:   for (n=0; n < nbytes; n++) newnumber[n+len] = getc(fp) & 0377;
        !           603:   newptr = makenumber(len+nbytes, newnumber, getsubtype(ptr));
        !           604:   free(ptr);
        !           605:   free(newnumber);
        !           606:   push(newptr);
        !           607:   }
        !           608: 
        !           609: static extendstring(nbytes)
        !           610:   int nbytes;
        !           611:   {
        !           612:   int n, len;
        !           613:   char *string, *newstring;
        !           614:   unsigned char *ptr, *newptr;
        !           615:   ptr = pop(type_string, subtype_identifier | subtype_string);
        !           616:   string = getstring(ptr, 0);
        !           617:   len = strlen(string);
        !           618:   newstring = (char *) malloc(len+nbytes+1);
        !           619:   strcpy(newstring, string);
        !           620:   for (n=0; n < nbytes; n++) newstring[n+len] = getc(fp) & 0377;
        !           621:   newstring[len+nbytes] = (char) 0;
        !           622:   newptr = makestring(newstring, getsubtype(ptr));
        !           623:   free(ptr);
        !           624:   free(newstring);
        !           625:   push(newptr);
        !           626:   }
        !           627: 
        !           628: 
        !           629: 
        !           630: 
        !           631: 
        !           632: /* Change Log
        !           633:  *
        !           634:  * K. Knox,  1-Apr-85 23:45:46, Created first version.
        !           635:  * K. Knox, 13-May-85 10:25:25, Fixed bugs in calls to maketransformation.
        !           636:  * K. Knox, 13-May-85 10:25:25, Fixed bug in angle calculation in op_rotate.
        !           637:  *
        !           638:  *
        !           639:  *
        !           640:  */
        !           641: 
        !           642: 
        !           643: 
        !           644: 

unix.superglobalmegacorp.com

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