BSD 4_1c_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Thu, 27 Jan 1983 07:36:14 +0000 (23:36 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Thu, 27 Jan 1983 07:36:14 +0000 (23:36 -0800)
Work on file usr/src/ucb/ingres/source/support/osys.c

Synthesized-from: CSRG/cd1/4.1c.2

usr/src/ucb/ingres/source/support/osys.c [new file with mode: 0644]

diff --git a/usr/src/ucb/ingres/source/support/osys.c b/usr/src/ucb/ingres/source/support/osys.c
new file mode 100644 (file)
index 0000000..a018751
--- /dev/null
@@ -0,0 +1,1127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef char   bool;           
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern short   *tT;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct relation
+{
+               char    relid[  12              ];      
+               char    relowner[2];    
+               char    relspec;        
+                               
+                               
+                               
+                               
+                               
+                               
+               char    relindxd;       
+               short   relstat2;       
+               short   relstat;        
+               long    relsave;        
+               long    reltups;        
+               short   relatts;        
+               short   relwid;         
+               long    relprim;        
+               long    relfree;        
+               long    relstamp;       
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct attribute
+{
+               char    attrelid[       12              ];      
+               char    attowner[2];    
+               short   attid;          
+               char    attname[        12              ];      
+               short   attoff;         
+               char    attfrmt;        
+               char    attfrml;        
+               char    attxtra;        
+};
+
+
+
+
+
+
+
+
+
+struct tup_id
+{
+
+               char    line_id, pg2, pg1, pg0;
+
+};
+
+typedef struct tup_id  TID;
+
+typedef union
+{
+       long    ltid;
+       TID     s_tupid;
+} tid_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct descriptor
+{
+       struct relation reldum;
+               
+
+
+
+
+       char    relvname[       12              ];      
+               short   relfp;          
+               short   relopn;         
+       tid_type reltid;        
+
+
+               long    reladds;        
+               short   reloff[ 50              ];      
+               char    relfrmt[        50              ]; 
+
+               char    relfrml[        50              ]; 
+
+
+               char    relxtra[        50              ]; 
+
+               char    relgiven[       50              ]; 
+
+
+};
+
+typedef struct descriptor      DESC;
+
+
+typedef struct
+{
+       DESC    *rngvdesc;      
+       bool    rngvmark;       
+}  RANGEV;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+union anytype
+{
+       char            i1type;
+       short           i2type;
+       long            i4type;
+       float           f4type;
+       double          f8type;
+       char            c0type[1];      
+
+
+       char            *cptype;
+       char            **cpptype;
+};
+
+typedef union anytype  ANYTYPE;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct accessparam
+{
+       short   mode;           
+       short   sec_index;      
+       char    keydno[ 50               + 1];
+};
+
+
+
+
+
+
+
+
+
+
+struct desxx
+{
+       char    *cach_relname;  
+       DESC    *cach_desc;     
+       DESC    *cach_alias;    
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern char    *Usercode;
+extern char    *Pathname;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct out_arg
+{
+       int     c0width;        
+       int     i1width;        
+       int     i2width;        
+       int     i4width;        
+       int     f4width;        
+       int     f8width;        
+       int     f4prec;         
+       int     f8prec;         
+       char    f4style;        
+       char    f8style;        
+       int     linesperpage;   
+       char    coldelim;       
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct lockreq
+{
+       char    lract;                  
+
+
+
+
+
+       char    lrtype;                 
+
+
+
+
+
+       char    lrmod;                  
+
+
+
+                                       
+       char    dbnode[4];              
+       char    lrel[4];                
+       char    lpage[4];               
+};
+
+extern char    Acclock;                
+extern int     Alockdes;               
+extern int     Lockrel;                
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct accbuf
+{
+       
+       long            mainpg;         
+       long            ovflopg;        
+       short           nxtlino;        
+       char            firstup[        1024             - 12]; 
+       short           linetab[1];     
+                                       
+
+
+
+       
+       long            rel_tupid;      
+       long            thispage;       
+       int             filedesc;       
+       struct accbuf   *modf;          
+       struct accbuf   *modb;          
+       int             bufstatus;      
+};
+
+
+
+
+
+
+
+struct
+{
+       char    acc_buf[3               ];
+};
+
+
+extern struct accbuf   *Acc_head;      
+extern struct accbuf   *Acc_tail;      
+extern struct accbuf   Acc_buf[3               ];      
+
+
+
+
+
+
+
+
+
+
+
+
+struct adminhdr
+{
+       char    adowner[2];     
+       short   adflags;        
+       short   adlength;       
+       short   adversion;      
+       short   adreldsz;       
+       short   adattdsz;       
+};
+
+struct admin
+{
+       struct adminhdr         adhdr;
+       struct descriptor       adreld;
+       struct descriptor       adattd;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern struct admin            Admin;
+
+
+
+
+
+struct pgtuple
+{
+       struct tup_id   childtid;               
+       char            childtup[       1010            ];
+};
+
+
+
+
+
+
+extern long    Accuread, Accuwrite;
+
+
+
+
+
+extern char    *Acctuple;              
+extern         Accerror;               
+extern char    Accanon[        1010            ];      
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct batchbuf
+{
+       char    file_id[        6       ];      
+       char    bbuf[506        ];      
+};
+
+
+struct si_doms
+{
+       short   rel_off;        
+       short   tupo_off;       
+       short   dom_size;       
+                               
+};
+struct batchhd
+{
+       char    db_name[15];    
+       char    rel_name[13];   
+       char    userid[2];      
+       long    num_updts;      
+       short   mode_up;        
+       short   tido_size;      
+       short   tupo_size;      
+       short   tupn_size;      
+       short   tidn_size;      
+       short   si_dcount;      
+       struct si_doms  si[     50              +1];    
+};
+
+
+
+short  Batch_fp;       
+short  Batch_cnt;      
+short  Batch_dirty;    
+short  Batch_lread;    
+short  Batch_recovery; 
+
+extern char    *Fileset;       
+struct batchbuf        Batchbuf;
+struct batchhd Batchhd;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef struct
+{
+       short   pv_type;        
+       short   pv_len;         
+       union
+       {
+               short                   pv_int;         
+               struct querytree        *pv_qtree;      
+               char                    *pv_str;        
+               char                    *pv_tuple;      
+       } pv_val;
+}  PARM;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ static char Sccsid[] = "@(#)sysmod.c  7.1     2/5/81";
+
+extern int     Status;
+short          tTdbu[100];
+
+
+char   *Fileset;
+char   Noupdt          =       0       ;
+char   *Dummy;
+char   **Xparams       = &Dummy;
+
+struct modtabl
+{
+       char    *rname;
+       char    **parvec;
+       int     goahead;
+       int     normgo;
+       int     optn;
+};
+
+char   *Relpar[] =
+{
+       "relation",     "hash",         "name",
+       "relid",                0       
+};
+
+char   *Attpar[] =
+{
+       "attribute",    "hash",         "name",
+       "attrelid",     "attowner",     "#attid",
+               0       
+};
+
+char   *Indpar[] =
+{
+       "indexes",      "hash",         "name",
+       "irelidp",      "iownerp",      "",
+       "minpages",     "5",                    0       
+};
+
+char   *Trepar[] =
+{
+       "tree",         "hash",         "name",
+       "treerelid",    "treeowner",    "treetype",
+               0       
+};
+
+char   *Propar[] =
+{
+       "protect",      "hash",         "name",
+       "prorelid",     "prorelown",            0       
+};
+
+char   *Intpar[] =
+{
+       "integrities",  "hash",         "name",
+       "intrelid",     "intrelowner",          0       
+};
+
+struct modtabl  Modtabl[] =
+{
+       "relation",     &Relpar[0],             0       ,               1       ,               0       ,
+       "attribute",    &Attpar[0],             0       ,               1       ,               0       ,
+       "indexes",      &Indpar[0],             0       ,               1       ,               0       ,
+       "tree",         &Trepar[0],             0       ,               1       ,               1       ,
+       "protect",      &Propar[0],             0       ,               1       ,               1       ,
+       "integrities",  &Intpar[0],             0       ,               1       ,               1       ,
+       0
+};
+
+
+
+
+
+
+
+main(argc, argv)
+int    argc;
+char   *argv[];
+{
+       register int    i;
+       register int    j;
+       register char   **av;
+       PARM            newpvec[40];
+       char            *p;
+       int             retval;
+       char            fileset[10], proctab[100];
+       extern char     *Parmvect[];
+       extern char     *Flagvect[];
+       extern char     *Dbpath;
+       int             superuser;
+
+       argv[argc] =    0       ;
+
+
+       tTrace(argv, 'T', tTdbu, 100);
+
+
+       itoa(getpid(), fileset);
+       Fileset = fileset;
+       i = initucode(argc, argv,       1       ,       0       ,       1);
+       switch (i)
+       {
+         case 0:
+         case 5:
+               break;
+
+         case 1:
+         case 6:
+               printf("Database %s does not exist\n", Parmvect[0]);
+               exit(-1);
+
+         case 2:
+               printf("You are not authorized for database %s\n", Parmvect[0]);
+               exit(-1);
+
+         case 3:
+               printf("You are not a valid INGRES user\n");
+               exit(-1);
+
+         case 4:
+               printf("No database name specified\n");
+       usage:
+               printf("Usage: sysmod [-s] [+-w] dbname [relation ...]\n");
+               exit(-1);
+
+         default:
+               syserr("initucode %d", i);
+       }
+
+       concat(Pathname, "/bin/ksort", proctab);
+       Dummy = proctab;
+
+       superuser =     0       ;
+       for (av = Flagvect; (p = *av) !=        0       ; av++)
+       {
+               if (p[0] != '-')
+               {
+               badflag:
+                       printf("Bad flag: %s\n", p);
+                       goto usage;
+               }
+               switch (p[1])
+               {
+                 case 's':
+                       if ((Status &   0100000         ) == 0)
+                       {
+                               printf("Only INGRES can use the -s flag\n");
+                               exit(-1);
+                       }
+                       superuser =     1       ;
+                       break;
+
+                 case 'T':
+                       break;
+
+                 default:
+                       goto badflag;
+               }
+       }
+       if (chdir(Dbpath) < 0)
+       {
+               printf("data base %s does not exist\n", Parmvect[0]);
+               exit(1);
+       }
+       if (superuser)
+               bmove(Admin.adhdr.adowner, Usercode, 2);
+       if (!bequal(Usercode, Admin.adhdr.adowner, 2))
+       {
+               printf("you are not the dba for %s\n", Parmvect[0]);
+               exit(1);
+       }
+
+
+
+
+
+
+       if (Parmvect[1] !=      0       )
+               if ((Parmvect[2] ==     0       ) && sequal(Parmvect[1], "all"))
+                       for (i = 0; Modtabl[i].rname; i++)
+                               Modtabl[i].goahead =    1       ;
+               else
+                       for (av = &Parmvect[1]; (p = *av) !=    0       ; av++)
+                       {
+                               for (j = 0; Modtabl[j].rname; j++)
+                               {
+                                       if (sequal(p, Modtabl[j].rname))
+                                       {
+                                               if (Modtabl[j].goahead)
+                                               {
+                                                       printf("%s duplicate relation name\n", p);
+                                                       exit(1);
+                                               }
+                                               Modtabl[j].goahead =    1       ;
+                                               break;
+                                       }
+                               }
+                               if (!Modtabl[j].rname)
+                               {
+                                       printf("%s is not a system relation\n", p);
+                                       exit(1);
+                               }
+                       }
+       else
+               for (i = 0; Modtabl[i].rname; i++)
+                       Modtabl[i].goahead = Modtabl[i].normgo;
+       for (i = 0; Modtabl[i].rname; i++)
+       {
+               if (Modtabl[i].goahead == 0 || optn_rel(&Modtabl[i]))
+                       continue;
+               printf("modifying %s\n", Modtabl[i].rname);
+               av = Modtabl[i].parvec;
+               j = 0;
+               while (*av !=   0       )
+               {
+                       newpvec[j].pv_type =    2       ;
+                       newpvec[j].pv_val.pv_str = *av;
+                       newpvec[j].pv_len = length(*av) + 1;
+                       j++;
+                       av++;
+               }
+               newpvec[j].pv_type =    0       ;
+               smove(Fileset, Batchbuf.file_id);
+
+               if (    (( 0 < 0) ? tT[1] : (tT[1] & (1 <<  0))))
+               {
+                       prvect(j, newpvec);
+               }
+
+               if (retval = modify(j, newpvec))
+               {
+                       printf("Error %d on %s\n", retval, Modtabl[i].rname);
+                       exit(1);
+               }
+       }
+       printf("sysmod done\n");
+       exit(0);
+}
+
+
+optn_rel(mx)
+struct modtabl *mx;
+{
+       register struct modtabl *m;
+       register int            ret;
+
+       struct descriptor       des;
+
+       m = mx;
+       ret =   0       ;
+
+       if (m->optn)
+       {
+               if (openr(&des, -1, m->rname))
+               {
+                       ret =   1       ;
+               }
+       }
+       return (ret);
+}
+
+rubproc()
+{
+       printf("sysmod interrupted\n");
+       exit(1);
+}