- case MESSAGE_PARTIAL:
- {
- PM pm;
- struct partial *p;
-
- NEW0(p);
- ct->c_ctparams = (void *) p;
-
- /* scan for parameters "id", "number", and "total" */
- for (pm = ci->ci_first_pm; pm; pm = pm->pm_next) {
- if (!strcasecmp (pm->pm_name, "id")) {
- p->pm_partid = add (pm->pm_value, NULL);
- continue;
- }
- if (!strcasecmp (pm->pm_name, "number")) {
- if (sscanf (pm->pm_value, "%d", &p->pm_partno) != 1
- || p->pm_partno < 1) {
-invalid_param:
- inform("invalid %s parameter for \"%s/%s\" type in message %s's %s field",
- pm->pm_name, ci->ci_type, ci->ci_subtype,
- ct->c_file, TYPE_FIELD);
- return NOTOK;
- }
- continue;
- }
- if (!strcasecmp (pm->pm_name, "total")) {
- if (sscanf (pm->pm_value, "%d", &p->pm_maxno) != 1
- || p->pm_maxno < 1)
- goto invalid_param;
- continue;
- }
- }
-
- if (!p->pm_partid
- || !p->pm_partno
- || (p->pm_maxno && p->pm_partno > p->pm_maxno)) {
- inform("invalid parameters for \"%s/%s\" type in message %s's %s field",
- ci->ci_type, ci->ci_subtype, ct->c_file, TYPE_FIELD);
- return NOTOK;
- }
- }
- break;
-