date and time created 81/04/13 16:26:15 by eric
authorEric Allman <eric@ucbvax.Berkeley.EDU>
Tue, 14 Apr 1981 07:26:15 +0000 (23:26 -0800)
committerEric Allman <eric@ucbvax.Berkeley.EDU>
Tue, 14 Apr 1981 07:26:15 +0000 (23:26 -0800)
SCCS-vsn: local/sccscmds/sccscmds.2/com/dodelt.c 1.1
SCCS-vsn: local/sccscmds/sccscmds.ok/com/dodelt.c 1.1

usr/src/local/sccscmds/sccscmds.2/com/dodelt.c [new file with mode: 0644]
usr/src/local/sccscmds/sccscmds.ok/com/dodelt.c [new file with mode: 0644]

diff --git a/usr/src/local/sccscmds/sccscmds.2/com/dodelt.c b/usr/src/local/sccscmds/sccscmds.2/com/dodelt.c
new file mode 100644 (file)
index 0000000..87d2aa9
--- /dev/null
@@ -0,0 +1,131 @@
+#include       "../hdr/defines.h"
+
+# define ONEYEAR 31536000L
+
+SCCSID(@(#)dodelt      2.1);
+
+long   Timenow;
+
+char   Pgmr[8];        /* for rmdel & chghist (rmchg) */
+int    First_esc;
+
+dodelt(pkt,statp,sidp,type)
+register struct packet *pkt;
+struct stats *statp;
+struct sid *sidp;
+char type;
+{
+       extern  char    *satoi();
+       struct deltab dt;
+       register struct idel *rdp;
+       int n, founddel;
+       long timediff;
+       register char *p;
+
+       pkt->p_idel = 0;
+       founddel = 0;
+
+       time(&Timenow);
+       stats_ab(pkt,statp);
+       while (getadel(pkt,&dt) == BDELTAB) {
+               if (pkt->p_idel == 0) {
+                       if (Timenow < dt.d_datetime)
+                               fprintf(stderr,"Clock may be set wrong! (co11)");
+                       timediff = Timenow - dt.d_datetime;
+                       if (timediff > ONEYEAR && pkt->p_verbose)
+                               fprintf(stderr,"Clock may be set wrong! (co11)\n");
+                       pkt->p_idel = alloc(n = ((dt.d_serial + 1) * sizeof(*pkt->p_idel)));
+                       zero(pkt->p_idel,n);
+                       pkt->p_apply = alloc(n = ((dt.d_serial + 1) * sizeof(*pkt->p_apply)));
+                       zero(pkt->p_apply,n);
+                       pkt->p_idel->i_pred = dt.d_serial;
+               }
+               if (dt.d_type == 'D') {
+                       if (sidp && eqsid(&dt.d_sid,sidp)) {
+                               copy(dt.d_pgmr,Pgmr);   /* for rmchg */
+                               zero(sidp,sizeof(*sidp));
+                               founddel = 1;
+                               First_esc = 1;
+                               for (p = pkt->p_line; *p && *p != 'D'; p++)
+                                       ;
+                               if (*p)
+                                       *p = type;
+                       }
+                       else
+                               First_esc = founddel = 0;
+                       pkt->p_maxr = max(pkt->p_maxr,dt.d_sid.s_rel);
+                       rdp = &pkt->p_idel[dt.d_serial];
+                       rdp->i_sid.s_rel = dt.d_sid.s_rel;
+                       rdp->i_sid.s_lev = dt.d_sid.s_lev;
+                       rdp->i_sid.s_br = dt.d_sid.s_br;
+                       rdp->i_sid.s_seq = dt.d_sid.s_seq;
+                       rdp->i_pred = dt.d_pred;
+                       rdp->i_datetime = dt.d_datetime;
+               }
+               while ((n = getline(pkt)) != NULL)
+                       if (pkt->p_line[0] != CTLCHAR)
+                               break;
+                       else {
+                               switch (pkt->p_line[1]) {
+                               case EDELTAB:
+                                       break;
+                               case COMMENTS:
+                               case MRNUM:
+                                       if (founddel)
+                                               escdodelt(pkt);
+                                       continue;
+                               default:
+                                       fmterr(pkt);
+                               case INCLUDE:
+                               case EXCLUDE:
+                               case IGNORE:
+                                       if (dt.d_type == 'D')
+                                               doixg(pkt->p_line,&rdp->i_ixg);
+                                       continue;
+                               }
+                               break;
+                       }
+               if (n == NULL || pkt->p_line[0] != CTLCHAR || getline(pkt) == NULL)
+                       fmterr(pkt);
+               if (pkt->p_line[0] != CTLCHAR || pkt->p_line[1] != STATS)
+                       break;
+       }
+       return(pkt->p_idel);
+}
+
+
+getadel(pkt,dt)
+register struct packet *pkt;
+register struct deltab *dt;
+{
+       if (getline(pkt) == NULL)
+               fmterr(pkt);
+       return(del_ab(pkt->p_line,dt,pkt));
+}
+
+
+doixg(p,ixgp)
+char *p;
+struct ixg *ixgp;
+{
+       int *v, *ip;
+       int type, cnt;
+       struct ixg *cur, *prev;
+
+       v = ip = alloca(BUFSIZ);
+       ++p;
+       type = *p++;
+       NONBLANK(p);
+       while (numeric(*p)) {
+               p = satoi(p,ip++);
+               NONBLANK(p);
+       }
+       cnt = ip - v;
+       for (cur = ixgp; cur = (prev = cur)->i_next; )
+               ;
+       prev->i_next = cur = alloc(sizeof(*cur) + (cnt - 1) * sizeof(cur->i_ser[0]));
+       cur->i_next = 0;
+       cur->i_type = type;
+       cur->i_cnt = cnt;
+       move(v,cur->i_ser,cnt * sizeof(cur->i_ser[0]));
+}
diff --git a/usr/src/local/sccscmds/sccscmds.ok/com/dodelt.c b/usr/src/local/sccscmds/sccscmds.ok/com/dodelt.c
new file mode 100644 (file)
index 0000000..87d2aa9
--- /dev/null
@@ -0,0 +1,131 @@
+#include       "../hdr/defines.h"
+
+# define ONEYEAR 31536000L
+
+SCCSID(@(#)dodelt      2.1);
+
+long   Timenow;
+
+char   Pgmr[8];        /* for rmdel & chghist (rmchg) */
+int    First_esc;
+
+dodelt(pkt,statp,sidp,type)
+register struct packet *pkt;
+struct stats *statp;
+struct sid *sidp;
+char type;
+{
+       extern  char    *satoi();
+       struct deltab dt;
+       register struct idel *rdp;
+       int n, founddel;
+       long timediff;
+       register char *p;
+
+       pkt->p_idel = 0;
+       founddel = 0;
+
+       time(&Timenow);
+       stats_ab(pkt,statp);
+       while (getadel(pkt,&dt) == BDELTAB) {
+               if (pkt->p_idel == 0) {
+                       if (Timenow < dt.d_datetime)
+                               fprintf(stderr,"Clock may be set wrong! (co11)");
+                       timediff = Timenow - dt.d_datetime;
+                       if (timediff > ONEYEAR && pkt->p_verbose)
+                               fprintf(stderr,"Clock may be set wrong! (co11)\n");
+                       pkt->p_idel = alloc(n = ((dt.d_serial + 1) * sizeof(*pkt->p_idel)));
+                       zero(pkt->p_idel,n);
+                       pkt->p_apply = alloc(n = ((dt.d_serial + 1) * sizeof(*pkt->p_apply)));
+                       zero(pkt->p_apply,n);
+                       pkt->p_idel->i_pred = dt.d_serial;
+               }
+               if (dt.d_type == 'D') {
+                       if (sidp && eqsid(&dt.d_sid,sidp)) {
+                               copy(dt.d_pgmr,Pgmr);   /* for rmchg */
+                               zero(sidp,sizeof(*sidp));
+                               founddel = 1;
+                               First_esc = 1;
+                               for (p = pkt->p_line; *p && *p != 'D'; p++)
+                                       ;
+                               if (*p)
+                                       *p = type;
+                       }
+                       else
+                               First_esc = founddel = 0;
+                       pkt->p_maxr = max(pkt->p_maxr,dt.d_sid.s_rel);
+                       rdp = &pkt->p_idel[dt.d_serial];
+                       rdp->i_sid.s_rel = dt.d_sid.s_rel;
+                       rdp->i_sid.s_lev = dt.d_sid.s_lev;
+                       rdp->i_sid.s_br = dt.d_sid.s_br;
+                       rdp->i_sid.s_seq = dt.d_sid.s_seq;
+                       rdp->i_pred = dt.d_pred;
+                       rdp->i_datetime = dt.d_datetime;
+               }
+               while ((n = getline(pkt)) != NULL)
+                       if (pkt->p_line[0] != CTLCHAR)
+                               break;
+                       else {
+                               switch (pkt->p_line[1]) {
+                               case EDELTAB:
+                                       break;
+                               case COMMENTS:
+                               case MRNUM:
+                                       if (founddel)
+                                               escdodelt(pkt);
+                                       continue;
+                               default:
+                                       fmterr(pkt);
+                               case INCLUDE:
+                               case EXCLUDE:
+                               case IGNORE:
+                                       if (dt.d_type == 'D')
+                                               doixg(pkt->p_line,&rdp->i_ixg);
+                                       continue;
+                               }
+                               break;
+                       }
+               if (n == NULL || pkt->p_line[0] != CTLCHAR || getline(pkt) == NULL)
+                       fmterr(pkt);
+               if (pkt->p_line[0] != CTLCHAR || pkt->p_line[1] != STATS)
+                       break;
+       }
+       return(pkt->p_idel);
+}
+
+
+getadel(pkt,dt)
+register struct packet *pkt;
+register struct deltab *dt;
+{
+       if (getline(pkt) == NULL)
+               fmterr(pkt);
+       return(del_ab(pkt->p_line,dt,pkt));
+}
+
+
+doixg(p,ixgp)
+char *p;
+struct ixg *ixgp;
+{
+       int *v, *ip;
+       int type, cnt;
+       struct ixg *cur, *prev;
+
+       v = ip = alloca(BUFSIZ);
+       ++p;
+       type = *p++;
+       NONBLANK(p);
+       while (numeric(*p)) {
+               p = satoi(p,ip++);
+               NONBLANK(p);
+       }
+       cnt = ip - v;
+       for (cur = ixgp; cur = (prev = cur)->i_next; )
+               ;
+       prev->i_next = cur = alloc(sizeof(*cur) + (cnt - 1) * sizeof(cur->i_ser[0]));
+       cur->i_next = 0;
+       cur->i_type = type;
+       cur->i_cnt = cnt;
+       move(v,cur->i_ser,cnt * sizeof(cur->i_ser[0]));
+}