3 * User interface routines for dbck (SMS database consistency checker)
5 * (c) Copyright 1988 by the Massachusetts Institute of Technology.
6 * For copying and distribution information, please see the file
10 #include <mit-copyright.h>
15 static char fix_qc_rcsid[] = "$Header$";
26 ## delete _table where _table._idfield = id
27 ## inquire_equel(rowcount = "rowcount")
29 printf("%d entr%s deleted\n", rowcount, rowcount==1?"y":"ies");
31 printf("Not deleted\n");
36 generic_delete(sq, pfunc, table, idfield, preen)
37 struct save_queue *sq;
39 char *table, *idfield;
44 generic_fix(sq, pfunc, "Delete", generic_ffunc, preen);
48 single_delete(table, idfield, id)
49 char *table, *idfield;
58 ##zero_fix(table, zrfield, idfield, id)
59 ##char *table, *zrfield, *idfield;
64 ## replace table (zrfield = 0) where table.idfield = id
65 ## inquire_equel(rowcount = "rowcount")
67 printf("%d entr%s fixed\n", rowcount, rowcount==1?"y":"ies");
69 printf("Not fixed\n");
74 int single_fix(msg, preen)
81 if (mode == MODE_PREEN) {
102 generic_fix(sq, pfunc, msg, ffunc, preen)
103 struct save_queue *sq;
105 int (*pfunc)(), (*ffunc)();
110 while (sq_get_data(sq, &id)) {
111 if ((*pfunc)(id) == 0 && single_fix(msg, preen))
122 ## extern int dcmenable;
125 printf("%s (Y/N/Q)? ", msg);
128 if (buf[0] == 'Y' || buf[0] == 'y')
130 if (buf[0] == 'N' || buf[0] == 'n')
132 if (buf[0] == 'Q' || buf[0] == 'q') {
133 if (prompt("Are you sure you want to quit")) {
134 if (prompt("Save database changes")) {
140 ## replace values (value = dcmenable)
141 ## where values.name = "dcm_enable"
152 ** set_next_object_id - set next object id in values table
154 ** Inputs: object - object name in values table and in objects
155 ** table - name of table objects are found in
157 ** - called before an APPEND operation to set the next object id to
158 ** be used for the new record to the next free value
162 int set_next_object_id(object, table)
167 ## int rowcount, exists, value;
171 ## range of v is values
172 ## repeat retrieve (value = v.#value) where v.#name = @name
173 ## inquire_equel(rowcount = "rowcount")
177 ## retrieve (exists = any(tbl.name where tbl.name = value))
178 ## inquire_equel(rowcount = "rowcount")
183 if (value > MAX_ID_VALUE)
184 value = MIN_ID_VALUE;
185 ## retrieve (exists = any(tbl.name where tbl.name = value))
188 printf("setting ID %s to %d\n", name, value);
189 ## repeat replace v (#value = @value) where v.#name = @name
195 ##generic_fix_id(table, idfield, txtfield, oldid, name)
204 set_next_object_id(table, idfield);
205 ## retrieve (id = values.value) where values.#name = idfield
206 ## replace table (idfield = values.value) where values.#name = idfield and
207 ## table.idfield = oldid and table.txtfield = name
208 ## inquire_equel(rowcount = "rowcount")
212 printf("Not fixed, rowcount = %d\n", rowcount);