File: do.c

package info (click to toggle)
moxftp 2.2-18.1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 4,160 kB
  • ctags: 3,837
  • sloc: ansic: 43,420; makefile: 353; perl: 262; sh: 192
file content (128 lines) | stat: -rw-r--r-- 3,006 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
 * Copyright (c) 1993 The Regents of the University of Texas System.
 * Copyright (c) 1994 The Regents of the University of Texas System.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted provided
 * that the above copyright notice and this paragraph are duplicated in all
 * such forms and that any documentation, advertising materials,  and other
 * materials  related to such  distribution  and use  acknowledge  that the
 * software  was  developed  by the  University of Texas.  The  name of the
 * University may not be  used to endorse or promote  products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

#ifndef lint
static char copyright[] =
"@(#) Copyright (c) 1993 The Regents of the University of Texas System.\n\
 All rights reserved.\n";
static char rcsid[] =
"$Id: do.c,v 1.2 1994/05/20 20:13:56 jones Exp $\n";
static char rcspath[] =
"$Source: /mintaka/u0/xx/ss/jones/jones.old/mftp.src/moxftp-2.0/RCS/do.c,v $\n";
#endif

/* $Log: do.c,v $
 * Revision 1.2  1994/05/20  20:13:56  jones
 * Only add register function once!
 *
 * Revision 1.1  1994/03/14  18:55:53  jones
 * Initial revision
 *
 */

#include "machine.h"
#include "defs.h"

struct _do_func {
        int      flags;
	void     (*func)();
	struct _do_func *next;
};

static struct _do_func *first = NULL;

void
add_func_do(func, flags)
void (*func)();
int   flags;
{
    struct _do_func *next, *new;

    next = first;
    while (next) {
	if (next->func == func && next->flags == flags) return;
	next = next->next;
    }

    new = (struct _do_func *)XtMalloc(sizeof(struct _do_func));
    ZERO((char *)new, sizeof(struct _do_func));

    if (first == NULL) {
	first = new;
    }  else {
	next = first;
	while (next->next) next = next->next;
	next->next = new;
    }
    new->func = func;
    new->flags = flags;
}

	
void
do_all(flag)
int flag;
{
    struct _do_func *next = first;
    struct _do_func *prev = NULL;
    struct _do_func *temp = NULL;

    while (next) {
	if (next->flags & flag) {
	    next->func(flag);
	    if (next->flags & DO_ONCE) {
		if (prev != NULL) prev->next = next->next;
		else 		  first = next->next; 
		temp = next;
	        next = next->next;
	    }
	}
	if (temp) { 
	    XtFree((char *)temp);
	    temp = NULL;
	}
	prev = next;
	next = next->next;
    }
}

void
remove_func_do(func, flags)
void (*func)();
int   flags;
{
    struct _do_func *next = first;
    struct _do_func *prev = NULL;
    struct _do_func *temp = NULL;

    while (next) {
	if (next->func == func && next->flags == flags) {
	    if (prev != NULL) prev->next = next->next;
	    else 	      first = next->next; 
	    temp = next;
	    next = next->next;
	    XtFree((char *)temp);
	    return;
	}
	prev = next;
	next = next->next;
    }
}