Annotation of 41BSD/cmd/cifplot/layers.c, revision 1.1.1.1

1.1       root        1: /*******************************************************************
                      2: *                                                                  *
                      3: *    File: CIFPLOT/layers.c                                        *
                      4: *    Written by Dan Fitzpatrick                                    *
                      5: *    copyright 1980 -- Regents of the University of California     *
                      6: *                                                                  *
                      7: ********************************************************************/
                      8: 
                      9: #include <stdio.h>
                     10: #include "defs.h"
                     11: #include "globals.h"
                     12: #include "parser_defs.h"
                     13: #include "structs.h"
                     14: #include "pats.h"
                     15: #include "alloc.h"
                     16: 
                     17: IMPORT alloc();
                     18: IMPORT palloc();
                     19: 
                     20: struct LCell *Layers;  /* Points to the list of layers */
                     21: int UsedLayers = 0;    /* Count of how many layers have been used */
                     22: 
                     23: extern struct LCell *FindLayer();      /* Forward Reference FindLayer */
                     24: 
                     25: InitLayers()
                     26: {
                     27:     int i;
                     28: 
                     29:     MaxLayers = NUM_LAYERS;
                     30:     Pats = (int **) alloc(MaxLayers*sizeof(int *));
                     31:     Layers = NIL;
                     32:     for(i=0; i<NLAYERS; i++)
                     33:        CreatLayer(pats[i].IName,&(pats[i].IPat[0]));
                     34:     FindLayer(pats[0].IName);
                     35:     }
                     36: 
                     37: CreatLayer(s,p)
                     38: char *s;
                     39: int *p;
                     40: /* Add a layer to the 'Layers' list. 's' is the layer's name and
                     41:  * p is a pointer to the patterns */
                     42: {
                     43:     struct LCell *t;
                     44: 
                     45:     t = (struct LCell *) palloc(sizeof(struct LCell));
                     46:     t->LName = s;
                     47:     t->pat = p;
                     48:     t->LNum = -1;
                     49:     /* Add t to list of layers */
                     50:     t->Link = Layers;
                     51:     t->BackLink = NIL;
                     52:     t->visible = 1;
                     53:     if(Layers != NIL)
                     54:        Layers->BackLink = t;
                     55:     Layers = t;
                     56:     return;
                     57:     }
                     58: 
                     59: struct LCell *
                     60: FindLayer(s)
                     61: char *s;
                     62: /* Return a pointer to list element of layer 's'. Return NIL if
                     63:  * 's' is not a layer */
                     64: {
                     65:     struct LCell *p;
                     66: 
                     67:     for(p=Layers;p!=NIL;p=p->Link)
                     68:        if(strcmp(p->LName,s) == 0) {
                     69:            if(p->LNum == -1) {
                     70:                /* If this layer has never been used before give it
                     71:                 * a number */
                     72:                if(UsedLayers >= MaxLayers) {
                     73:                        MaxLayers = MaxLayers*2;
                     74:                        Pats = (int **) expand(Pats,MaxLayers*sizeof(int *));
                     75:                        }
                     76:                Pats[UsedLayers] = p->pat;
                     77:                p->LNum = UsedLayers++;
                     78:                }
                     79:            return(p);
                     80:            }
                     81:     return((struct LCell *) NIL);
                     82:     }
                     83: 
                     84: struct LCell *
                     85: GetLayer(n)
                     86: int n;
                     87: {
                     88:     struct LCell *p;
                     89: 
                     90:     for(p=Layers;p!=NIL;p=p->Link)
                     91:        if(p->LNum == n)
                     92:            return(p);
                     93:      return(NIL);
                     94: }
                     95: 
                     96: Command *
                     97: MakeLayer(l)
                     98: char *l;
                     99: /* Create a Command of type LAYER which has the value of
                    100:  * the layer in it's level field */
                    101: {
                    102:     Command *command;
                    103:     struct LCell *p;
                    104: 
                    105:     command = GetCommand();
                    106:     command->type = LAYER;
                    107:     command->CLink = NIL;
                    108:     command->Ctype.Layer = l;
                    109:     p = FindLayer(l);
                    110:     if(p == NIL) {
                    111:        Error("Unknown Layer",FATAL);
                    112:        CreatLayer(l,FindLayer("null")->pat);
                    113:        p = FindLayer(l);
                    114:        }
                    115:     command->level = p->LNum;
                    116:     return(command);
                    117:     }
                    118: 
                    119: Invisible(str)
                    120: char *str;
                    121: /* str is a string of layer names seperated by commas or spaces
                    122:  * that are to be made invisible */
                    123:  {
                    124:     char *name,ch;
                    125:     struct LCell *l;
                    126:     do {
                    127:        name = str;
                    128:        while(*str != '\0' && *str != ',' && *str != ' ' && *str != '\t') str++;
                    129:        ch = *str;
                    130:        *str = '\0';
                    131:        if(strcmp(name,"bbox") == 0) symbox = 0;
                    132:          else if(strcmp(name,"text") == 0) text = 0;
                    133:            else if(strcmp(name,"symbolName") == 0) printSymbolName = 0;
                    134:              else {
                    135:                l = FindLayer(name);
                    136:                if(l != NIL) l->visible = 0;
                    137:                  else fprintf(stderr,"%s: No Such Layer\n",name);
                    138:                }
                    139:        str++;
                    140:        } while(ch != '\0');
                    141:     }

unix.superglobalmegacorp.com

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