diff options
Diffstat (limited to 'sys.c')
-rw-r--r-- | sys.c | 91 |
1 files changed, 46 insertions, 45 deletions
@@ -1,4 +1,4 @@ -/* Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2002, 2006 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -51,7 +51,6 @@ #endif void igc P((const char *what, SCM basecont)); -void lfflush P((SCM port)); /* internal SCM call */ SCM *loc_open_file; /* for open-file callback */ SCM *loc_try_create_file; @@ -352,6 +351,7 @@ SCM del_fil(str) void prinport(exp, port, type) SCM exp; SCM port; char *type; { + int filn = fileno(STREAM(exp)); lputs("#<", port); if (CLOSEDP(exp)) lputs("closed-", port); else { @@ -366,8 +366,11 @@ void prinport(exp, port, type) # ifndef AMIGA # ifndef macintosh # ifndef PLAN9 - if (OPENP(exp) && tc16_fport==TYP16(exp) && isatty(fileno(STREAM(exp)))) - lputs(ttyname(fileno(STREAM(exp))), port); + if (OPENP(exp) && tc16_fport==TYP16(exp) && filn >= 0 && isatty(filn)) { + char *ttyn = ttyname(filn); + if (ttyn) lputs(ttyn, port); + else goto punt; + } else # endif # endif @@ -375,19 +378,20 @@ void prinport(exp, port, type) # endif # endif #endif + punt: { SCM s = PORTP(exp) ? SCM_PORTDATA(exp) : UNDEFINED; if (NIMP(s) && STRINGP(s)) - iprin1(s, port, 1); + scm_iprin1(s, port, 1); else if (OPFPORTP(exp)) - intprint((long)fileno(STREAM(exp)), 10, port); + scm_intprint((long)filn, 10, port); else - intprint(CDR(exp), -16, port); + scm_intprint(CDR(exp), -16, port); if (TRACKED & SCM_PORTFLAGS(exp)) { - lputs(" L", port); - intprint(scm_port_table[SCM_PORTNUM(exp)].line, 10, port); - lputs(" C", port); - intprint(scm_port_table[SCM_PORTNUM(exp)].col+0L, 10, port); + lputs(" L", port); + scm_intprint(scm_port_table[SCM_PORTNUM(exp)].line, 10, port); + lputs(" C", port); + scm_intprint(scm_port_table[SCM_PORTNUM(exp)].col+0L, 10, port); } } lputc('>', port); @@ -496,7 +500,7 @@ sizet pwrite(ptr, size, nitems, port) { sizet len = size * nitems; sizet i = 0; - for(;i < len;i++) putc(ptr[i], port); + for (;i < len;i++) putc(ptr[i], port); return len; } # define ffwrite pwrite @@ -521,6 +525,7 @@ static ptobfuns fptob = { fflush, fgetc, fclose}; + ptobfuns pipob = { 0, mark0, @@ -537,6 +542,7 @@ ptobfuns pipob = { #endif fflush, fgetc}; + static ptobfuns stptob = { s_string, markcdr, @@ -695,6 +701,7 @@ static int tc16_sysport; #define SYS_ERRP_SIZE 480 static char errbuf[SYS_ERRP_SIZE]; static sizet errbuf_end = 0; + static sizet syswrite(str, siz, num, p) sizet siz, num; char *str; FILE *p; @@ -709,11 +716,11 @@ static sizet syswrite(str, siz, num, p) errbuf_end = dst; } else { - if (NIMP(cur_outp)) lflush(cur_outp); + /* if (NIMP(cur_errp) && OPOUTPORTP(cur_errp)) lfflush(cur_errp); */ if (errbuf_end > 0) { if (errbuf_end > SYS_ERRP_SIZE) { scm_warn("output buffer", " overflowed", UNDEFINED); - intprint((long)errbuf_end, 10, cur_errp); + scm_intprint((long)errbuf_end, 10, cur_errp); lputs(" chars needed\n", cur_errp); errbuf_end = errbuf_end % SYS_ERRP_SIZE; lfwrite(&errbuf[errbuf_end], 1, @@ -723,7 +730,7 @@ static sizet syswrite(str, siz, num, p) errbuf_end = 0; } num = lfwrite(str, siz, num, cur_errp); - lflush(cur_errp); + /* if (NIMP(cur_errp) && OPOUTPORTP(cur_errp)) lfflush(cur_errp); */ } errno = 0; return num; @@ -741,12 +748,6 @@ static int sysputc(c, p) syswrite(&cc, 1, 1, p); return c; } -static int sysflush(p) - FILE *p; -{ - syswrite(0, 0, 0, p); - return 0; -} static ptobfuns sysptob = { 0, mark0, @@ -756,7 +757,7 @@ static ptobfuns sysptob = { sysputc, sysputs, syswrite, - sysflush, + noop0, noop0, noop0}; @@ -828,7 +829,7 @@ static int safeputc(c, p) static int safeflush(p) safeport *p; { - lflush(p->port); + if (p && NIMP(p->port) && OPOUTPORTP(p->port)) lfflush(p->port); return 0; } static SCM marksafep(ptr) @@ -860,7 +861,7 @@ static int freeprint(exp, port, writing) { if (tc_broken_heart==CAR(exp)) { lputs("#<GC-FORWARD->", port); - iprin1(CDR(exp), port, writing); + scm_iprin1(CDR(exp), port, writing); } else { if (NIMP(CDR(exp)) && tc7_smob==CAR(CDR(exp))) { @@ -868,10 +869,10 @@ static int freeprint(exp, port, writing) } else { lputs("#<NEW-CELL . ", port); - iprin1(CDR(exp), port, writing); + scm_iprin1(CDR(exp), port, writing); } lputs(" @0x", port); - intprint((long)exp, -16, port); + scm_intprint((long)exp, -16, port); } lputc('>', port); return !0; @@ -1390,7 +1391,7 @@ SCM sym2vcell(sym) SCM lsym, z; sizet hash = strhash(UCHARS(sym), (sizet)LENGTH(sym), (unsigned long)symhash_dim); - for(lsym = VELTS(symhash)[hash];NIMP(lsym);lsym = CDR(lsym)) { + for (lsym = VELTS(symhash)[hash];NIMP(lsym);lsym = CDR(lsym)) { z = CAR(lsym); if (CAR(z)==sym) return z; } @@ -1408,12 +1409,12 @@ SCM intern(name, len) sizet hash = strhash(tmp, i, (unsigned long)symhash_dim); /* printf("intern %s len=%d\n",name,len); fflush(stdout); */ DEFER_INTS; - for(lsym = VELTS(symhash)[hash];NIMP(lsym);lsym = CDR(lsym)) { + for (lsym = VELTS(symhash)[hash];NIMP(lsym);lsym = CDR(lsym)) { z = CAR(lsym); z = CAR(z); tmp = UCHARS(z); if (LENGTH(z) != len) goto trynext; - for(i = len;i--;) if (((unsigned char *)name)[i] != tmp[i]) goto trynext; + for (i = len;i--;) if (((unsigned char *)name)[i] != tmp[i]) goto trynext; ALLOW_INTS; return CAR(lsym); trynext: ; @@ -1439,12 +1440,12 @@ SCM sysintern(name, val) register sizet i = len; register unsigned char *tmp = (unsigned char *)name; sizet hash = strhash(tmp, i, (unsigned long)symhash_dim); - for(lsym = VELTS(symhash)[hash];NIMP(lsym);lsym = CDR(lsym)) { + for (lsym = VELTS(symhash)[hash];NIMP(lsym);lsym = CDR(lsym)) { z = CAR(lsym); z = CAR(z); tmp = UCHARS(z); if (LENGTH(z) != len) goto trynext; - for(i = len;i--;) if (((unsigned char *)name)[i] != tmp[i]) goto trynext; + for (i = len;i--;) if (((unsigned char *)name)[i] != tmp[i]) goto trynext; lsym = CAR(lsym); if (!UNBNDP(val)) CDR(lsym) = val; else if (UNBNDP(CDR(lsym)) && tc7_msymbol==TYP7(CAR(lsym))) @@ -1593,11 +1594,11 @@ void stack_report() { STACKITEM stack; lputs(";; stack: 0x", cur_errp); - intprint((long)CONT(rootcont)->stkbse, -16, cur_errp); + scm_intprint((long)CONT(rootcont)->stkbse, -16, cur_errp); lputs(" - 0x", cur_errp); - intprint((long)&stack, -16, cur_errp); + scm_intprint((long)&stack, -16, cur_errp); lputs("; ", cur_errp); - intprint(stack_size(CONT(rootcont)->stkbse)*sizeof(STACKITEM), 10, cur_errp); + scm_intprint(stack_size(CONT(rootcont)->stkbse)*sizeof(STACKITEM), 10, cur_errp); lputs(" bytes\n", cur_errp); } @@ -1813,13 +1814,13 @@ void heap_report() { long seg_cells = CELL_DN(hplims[i+1]) - CELL_UP(hplims[i]); lputs("\n; 0x", sys_errp); - intprint((long)hplims[i++], -16, sys_errp); + scm_intprint((long)hplims[i++], -16, sys_errp); lputs(" - 0x", sys_errp); - intprint((long)hplims[i++], -16, sys_errp); + scm_intprint((long)hplims[i++], -16, sys_errp); lputs("; ", sys_errp); - intprint(seg_cells, 10, sys_errp); + scm_intprint(seg_cells, 10, sys_errp); lputs(" cells; ", sys_errp); - intprint(seg_cells / (1024 / sizeof(CELLPTR)), 10, sys_errp); + scm_intprint(seg_cells / (1024 / sizeof(CELLPTR)), 10, sys_errp); lputs(".kiB", sys_errp); }} } @@ -1967,9 +1968,9 @@ void scm_free_gra(gra) void gra_report1(gra) scm_gra *gra; { - intprint((long)gra->len, -10, cur_errp); + scm_intprint((long)gra->len, -10, cur_errp); lputs(" (of ", cur_errp); - intprint((long)gra->alloclen, -10, cur_errp); + scm_intprint((long)gra->alloclen, -10, cur_errp); lputs(") ", cur_errp); lputs(gra->what, cur_errp); lputs("; ", cur_errp); @@ -2049,7 +2050,7 @@ SCM scm_open_ports() { SCM p, res = EOL; int k; - for(k = scm_port_table_len - 1; k > 0; k--) { + for (k = scm_port_table_len - 1; k > 0; k--) { p = scm_port_table[k].port; if (NIMP(p) && OPPORTP(p)) res = cons(p, res); @@ -2462,7 +2463,7 @@ void free_storage() gc_end(); ALLOW_INTS; /* A really bad idea, but printing does it anyway. */ exit_report(); - lflush(sys_errp); + lfflush(sys_errp); scm_free_gra(&ptobs_gra); lmallocated = mallocated = 0; /* Can't do gc_end() here because it uses ptobs which have been freed */ @@ -2655,7 +2656,7 @@ static void gc_sweep(contin_bad) while (i < hplim_ind) { ptr = CELL_UP(hplims[i++]); seg_cells = CELL_DN(hplims[i++]) - ptr; - for(j = seg_cells; j--; ++ptr) { + for (j = seg_cells; j--; ++ptr) { #ifdef POINTERS_MUNGED scmptr = PTR2SCM(ptr); #endif @@ -2814,7 +2815,7 @@ static void gc_sweep(contin_bad) /* must_free((char *)hplims[i-2], sizeof(cell) * (hplims[i-1] - hplims[i-2])); */ hplims[i-2] = 0; - for(j = i;j < hplim_ind;j++) hplims[j-2] = hplims[j]; + for (j = i;j < hplim_ind;j++) hplims[j-2] = hplims[j]; hplim_ind -= 2; i -= 2; /* need to scan segment just moved. */ nfreelist = freelist; @@ -2976,7 +2977,7 @@ static void sweep_port_table() { int k; /* tmp_errp gets entry 0, so we never clear its flags. */ - for(k = scm_port_table_len - 1; k > 0; k--) { + for (k = scm_port_table_len - 1; k > 0; k--) { if (scm_port_table[k].flags & 1) scm_port_table[k].flags &= (~1L); else { |