1diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/asl.h /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/asl.h
2*** solvers/asl.h	2005-06-25 12:56:47.000000000 -0400
3--- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/asl.h	2006-03-03 14:50:03.000000000 -0500
4***************
5*** 200,205 ****
6--- 200,209 ----
7  	char rl_buf[80];
8  	void (*iadjfcn) ANSI((void*, unsigned long));
9  	void (*dadjfcn) ANSI((void*, unsigned long));
10+ 	 /* LL */
11+ 	char *snl;
12+ 	int snl_pos;
13+ 	int snl_len;
14  	} EdRead_ASL;
15  #define EdRead EdRead_ASL
16
17***************
18*** 542,547 ****
19--- 546,552 ----
20  ASL {
21  	Edagpars p;
22  	Edaginfo i;
23+ 	EdRead_ASL Rbackup;
24  	};
25
26   typedef struct
27diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/jac0dim.c /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/jac0dim.c
28*** solvers/jac0dim.c	2003-12-13 16:23:55.000000000 -0500
29--- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/jac0dim.c	2006-03-03 14:50:01.000000000 -0500
30***************
31*** 122,134 ****
32  	FILE *nl;
33  	int i, k, nlv;
34  	char *s, *se;
35! 	EdRead ER, *R;
36
37  	if (!asl)
38  		badasl_ASL(asl,0,"jac0dim");
39  	fpinit_ASL();	/* get IEEE arithmetic, if possible */
40
41! 	if (stub_len <= 0)
42  		for(i = 0; stub[i]; i++);
43  	else
44  		for(i = stub_len; stub[i-1] == ' ' && i > 0; --i);
45--- 122,142 ----
46  	FILE *nl;
47  	int i, k, nlv;
48  	char *s, *se;
49! 	EdRead *R;
50
51  	if (!asl)
52  		badasl_ASL(asl,0,"jac0dim");
53  	fpinit_ASL();	/* get IEEE arithmetic, if possible */
54
55! 	R = EdReadInit_ASL(&asl->Rbackup, asl, NULL, 0);
56! 	if (stub_len < 0) {
57! 		/* Treat the stub as the content of the file */
58! 		R->snl = stub;
59! 		R->snl_pos = 0;
60! 		R->snl_len = -stub_len;
61! 		nl = NULL;
62! 	} else {
63! 		if (stub_len == 0)
64  			for(i = 0; stub[i]; i++);
65  		else
66  			for(i = stub_len; stub[i-1] == ' ' && i > 0; --i);
67***************
68*** 150,156 ****
69  		fprintf(Stderr, "can't open %s\n", filename);
70  		exit(1);
71  		}
72! 	R = EdReadInit_ASL(&ER, asl, nl, 0);
73  	R->Line = 0;
74  	s = read_line(R);
75  	binary_nl = 0;
76--- 158,165 ----
77  			fprintf(Stderr, "can't open %s\n", filename);
78  			exit(1);
79  		}
80! 	}
81! 	R->nl = nl;
82  	R->Line = 0;
83  	s = read_line(R);
84  	binary_nl = 0;
85***************
86*** 285,291 ****
87  {
88  	FILE *nl;
89
90! 	if (nl = jac0dim_ASL(asl, stub, stub_len)) {
91  		*M = n_con;
92  		*N = n_var;
93  		*NO = n_obj;
94--- 294,303 ----
95  {
96  	FILE *nl;
97
98! 	/* LL */
99! 	nl = jac0dim_ASL(asl, stub, stub_len);
100!
101! 	if (nl && stub_len < 0) {
102  		*M = n_con;
103  		*N = n_var;
104  		*NO = n_obj;
105diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/misc.c /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/misc.c
106*** solvers/misc.c	2005-05-09 00:34:50.000000000 -0400
107--- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/misc.c	2006-03-02 19:38:28.000000000 -0500
108***************
109*** 44,49 ****
110--- 44,86 ----
111   static char anyedag[] = "fg_read (or one of its variants)";
112   static char psedag[] = "pfg_read, pfgh_read, or jacpdim";
113
114+
115+  int
116+ #ifdef KR_headers
117+ LL_getc(R) EdRead *R;
118+ #else
119+ LL_getc(EdRead *R)
120+ #endif
121+ {
122+ 	int c;
123+ 	if (R->nl) {
124+ 		c = getc(R->nl);
125+ 	} else {
126+ 		if (R->snl_pos == R->snl_len) {
127+ 			c = EOF;
128+ 		} else {
129+ 			c = R->snl[R->snl_pos++];
130+ 		}
131+ 	}
132+ 	return c;
133+     }
134+
135+  void
136+ #ifdef KR_headers
137+ LL_ungetc(c, R) int c; EdRead *R;
138+ #else
139+ LL_ungetc(int c, EdRead *R)
140+ #endif
141+ {
142+ 	if (R->nl) {
143+ 		ungetc(c, R->nl);
144+ 	} else {
145+ 		if (c != EOF) {
146+ 			R->snl_pos--;
147+ 		}
148+ 	}
149+     }
150+
151   void
152  #ifdef KR_headers
153  exit_ASL(R, n) EdRead *R; int n;
154***************
155*** 359,380 ****
156  	int c;
157  	R->Line++;
158  	R->lineinc = 0;
159! 	R->rl_buf[0] = c = getc(R->nl);
160  	return c;
161  	}
162
163   static void
164  #ifdef KR_headers
165! eatcr(nl) FILE *nl;
166  #else
167! eatcr(FILE *nl)
168  #endif
169  {
170  	int c;
171
172! 	while((c = getc(nl)) == '\r');
173  	if (c >= 0 && c != '\n')
174! 		ungetc(c, nl);
175  	}
176
177   char *
178--- 396,417 ----
179  	int c;
180  	R->Line++;
181  	R->lineinc = 0;
182! 	R->rl_buf[0] = c = LL_getc(R);
183  	return c;
184  	}
185
186   static void
187  #ifdef KR_headers
188! eatcr(R) EdRead *R;
189  #else
190! eatcr(EdRead *R)
191  #endif
192  {
193    int c;
194
195!   while((c = LL_getc(R)) == '\r');
196    if (c >= 0 && c != '\n')
197! 	  LL_ungetc(c, R);
198  }
199
200   char *
201***************
202*** 399,405 ****
203  		}
204  	rv = s;
205  	for(;;) {
206! 		x = getc(nl);
207  		if (x < ' ') {
208  			if (x < 0) {
209   eof:
210--- 436,442 ----
211  		}
212  	rv = s;
213  	for(;;) {
214! 		x = LL_getc(R);
215  		if (x < ' ') {
216  			if (x < 0) {
217   eof:
218***************
219*** 413,428 ****
220  			if (x == '\n')
221  				break;
222  			if (x == '\r') {
223! 				eatcr(nl);
224  				break;
225  				}
226  			}
227  		*s++ = x;
228  		if (s >= se) {
229  			for(;;) {
230! 				x = getc(nl);
231  				if (x == '\r') {
232! 					eatcr(nl);
233  					goto eol;
234  					}
235  				if (x == '\n')
236--- 450,465 ----
237  			if (x == '\n')
238  				break;
239  			if (x == '\r') {
240! 				eatcr(R);
241  				break;
242  				}
243  			}
244  		*s++ = x;
245  		if (s >= se) {
246  			for(;;) {
247! 				x = LL_getc(R);
248  				if (x == '\r') {
249! 					eatcr(R);
250  					goto eol;
251  					}
252  				if (x == '\n')
253***************
254*** 848,853 ****
255--- 885,893 ----
256  	R->can_end = 0;
257  	R->dadjfcn = asl->i.dadjfcn;
258  	R->iadjfcn = asl->i.iadjfcn;
259+ 	R->snl = NULL;
260+ 	R->snl_pos = 0;
261+ 	R->snl_len = 0;
262  	return R;
263  	}
264
265diff -c --exclude=.depend --exclude='*.html*' -r -w solvers/pfg_read.c /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/pfg_read.c
266*** solvers/pfg_read.c	2005-06-25 12:57:51.000000000 -0400
267--- /home/ladanyi/Ipopt.orig/Extern/ASL/solvers/pfg_read.c	2006-03-03 14:56:07.000000000 -0500
268***************
269*** 4651,4657 ****
270  #endif
271  {
272  	ASLTYPE *asl;
273! 	EdRead ER, *R;
274  	Jmp_buf JB;
275  	Static SS, *S;
276  	cgrad *cg, **cgp;
277--- 4651,4657 ----
278  #endif
279  {
280  	ASLTYPE *asl;
281! 	EdRead ER, *R, Rbackup;
282  	Jmp_buf JB;
283  	Static SS, *S;
284  	cgrad *cg, **cgp;
285***************
286*** 4667,4674 ****
287--- 4667,4679 ----
288  	ASL_CHECK(a, asltype, who);
289  	asl = (ASLTYPE*)a;
290  	S = S_init(&SS, asl);
291+ 	Rbackup = a->Rbackup;
292  	ed_reset(asl);
293  	SS.R = R = EdReadInit_ASL(&ER, a, nl, S);
294+ 	/* LL */
295+ 	R->snl = Rbackup.snl;
296+ 	R->snl_pos = Rbackup.snl_pos;
297+ 	R->snl_len = Rbackup.snl_len;
298  	if (flags & ASL_return_read_err) {
299  		a->i.err_jmp_ = &JB;
300  		i = setjmp(JB.jb);
301***************
302*** 4796,4802 ****
303  		ER.can_end = 1;
304  		i = edag_peek(R);
305  		if (i == EOF) {
306! 			fclose(nl);
307  			do_ewalk(S);
308  			if (imap)
309  				del_mblk(kimap, imap);
310--- 4801,4808 ----
311  		ER.can_end = 1;
312  		i = edag_peek(R);
313  		if (i == EOF) {
314! 			/* LL */
315! 			if (nl) fclose(nl);
316  			do_ewalk(S);
317  			if (imap)
318  				del_mblk(kimap, imap);
319