summaryrefslogtreecommitdiff
path: root/web/funnelAC/fwACsrc/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'web/funnelAC/fwACsrc/misc.c')
-rw-r--r--web/funnelAC/fwACsrc/misc.c235
1 files changed, 235 insertions, 0 deletions
diff --git a/web/funnelAC/fwACsrc/misc.c b/web/funnelAC/fwACsrc/misc.c
new file mode 100644
index 0000000000..ab1a2db9d0
--- /dev/null
+++ b/web/funnelAC/fwACsrc/misc.c
@@ -0,0 +1,235 @@
+/*##############################################################################
+
+FUNNNELWEB COPYRIGHT
+====================
+FunnelWeb is a literate-programming macro preprocessor.
+
+Copyright (C) 1992 Ross N. Williams.
+
+ Ross N. Williams
+ ross@spam.adelaide.edu.au
+ 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of Version 2 of the GNU General Public License as
+published by the Free Software Foundation.
+
+This program is distributed WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See Version 2 of the GNU General Public License for more details.
+
+You should have received a copy of Version 2 of the GNU General Public
+License along with this program. If not, you can FTP the license from
+prep.ai.mit.edu/pub/gnu/COPYING-2 or write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Section 2a of the license requires that all changes to this file be
+recorded prominently in this file. Please record all changes here.
+
+Programmers:
+ RNW Ross N. Williams ross@spam.adelaide.edu.au
+
+Changes:
+ 07-May-1992 RNW Program prepared for release under GNU GPL V2.
+ 08-Aug-1995 ABC Changed include file name from "memory.h"
+ to "fwmem.h" to avoid a clash with the C++
+ standard header file "memory.h".
+
+##############################################################################*/
+
+
+/******************************************************************************/
+/* MISC.C */
+/******************************************************************************/
+
+#include <ctype.h>
+#include "style.h"
+
+#include "as.h"
+#include "data.h"
+#include "fwmem.h"
+#include "misc.h"
+#include "writfile.h"
+
+/******************************************************************************/
+
+EXPORT void wr_s (s) char *s; {wf_wr(&f_s,s);}
+EXPORT void wr_j (s) char *s; {wf_wr(&f_j,s);}
+EXPORT void wr_l (s) char *s; {wf_wr(&f_l,s);}
+
+EXPORT void wl_s (s) char *s; {wf_wr(&f_s,s); wf_wr(&f_s,"\n");}
+EXPORT void wl_j (s) char *s; {wf_wr(&f_j,s); wf_wr(&f_j,"\n");}
+EXPORT void wl_l (s) char *s; {wf_wr(&f_l,s); wf_wr(&f_l,"\n");}
+
+EXPORT void wr_sj (s) char *s; {wr_s(s); wr_j(s);}
+EXPORT void wl_sj (s) char *s; {wl_s(s); wl_j(s);}
+
+EXPORT void wr_sjl(s) char *s; {wr_s(s); wr_j(s); wr_l(s);}
+EXPORT void wl_sjl(s) char *s; {wl_s(s); wl_j(s); wl_l(s);}
+
+/******************************************************************************/
+
+EXPORT char *chabbrev(ch)
+int ch;
+{
+ switch (ch)
+ {
+ case 0: return "NUL";
+ case 1: return "SOH";
+ case 2: return "STX";
+ case 3: return "ETX";
+ case 4: return "EOT";
+ case 5: return "ENQ";
+ case 6: return "ACK";
+ case 7: return "BEL";
+ case 8: return "BS";
+ case 9: return "HT";
+ case 10: return "LF";
+ case 11: return "VT";
+ case 12: return "FF";
+ case 13: return "CR";
+ case 14: return "SO";
+ case 15: return "SI";
+ case 16: return "DLE";
+ case 17: return "DC1";
+ case 18: return "DC2";
+ case 19: return "DC3";
+ case 20: return "DC4";
+ case 21: return "NAK";
+ case 22: return "SYN";
+ case 23: return "ETB";
+ case 24: return "CAN";
+ case 25: return "EM";
+ case 26: return "SUB";
+ case 27: return "ESC";
+ case 28: return "FS";
+ case 29: return "GS";
+ case 30: return "RS";
+ case 31: return "US";
+ case 127:return "DEL";
+ default: return "";
+ }
+}
+
+/******************************************************************************/
+
+EXPORT sign signof(n)
+long n;
+{
+ if (n<0) return -1;
+ if (n>0) return 1;
+ return 0;
+}
+
+/******************************************************************************/
+
+EXPORT char * eq_files(name1,name2,p_result)
+char *name1;
+char *name2;
+bool *p_result;
+{
+ FILE *file1;
+ FILE *file2;
+
+ /* The following three lines define two comparison buffers. The next part of */
+ /* the two files being compared are read into these buffers and compared. */
+ /* Using the buffers allows bulk reads, which speeds things up considerably. */
+#define CMPBUFSIZ 16384
+ STAVAR ubyte_ *buf1 = NULL;
+ STAVAR ubyte_ *buf2 = NULL;
+
+ /* Set the default result to be FALSE (no match). */
+ *p_result=FALSE;
+
+ /* Allocate the comparison buffers if they are not already allocated. */
+ if (buf1 == NULL)
+ {
+ buf1=(ubyte_ *) mm_perm((size_t) CMPBUFSIZ);
+ buf2=(ubyte_ *) mm_perm((size_t) CMPBUFSIZ);
+ }
+
+ /* Open, for binary reading, the two files to be compared. */
+ file1=fopen(name1,"rb");
+ if (file1 == FOPEN_F)
+ return "Error opening the first file.";
+ file2=fopen(name2,"rb");
+ if (file2 == FOPEN_F)
+ {fclose(file1);return "Error opening the second file.";}
+
+ while (TRUE)
+ { /* Compare a chunk. */
+ size_t len1;
+ size_t len2;
+
+ /* Read a chunk from each file. */
+ len1=fread(buf1,(size_t) 1,(size_t) CMPBUFSIZ,file1);
+ len2=fread(buf2,(size_t) 1,(size_t) CMPBUFSIZ,file2);
+ if (ferror(file1))
+ return "Compare: Error reading the first file.";
+ if (ferror(file2))
+ return "Compare: Error reading the second file.";
+
+ /* Compare the two chunks. */
+ if (len1 != len2) break;
+ if (len1 == 0) {*p_result=TRUE; break;}
+ if (memcmp(buf1,buf2,(size_t) len1) != 0) break;
+ }
+
+ if (fclose(file1) == FCLOSE_F)
+ {*p_result=FALSE; return "Error closing the first file.";}
+ if (fclose(file2) == FCLOSE_F)
+ {*p_result=FALSE; return "Error closing the second file.";}
+
+ /* If we have reached this point, we can be sure that no errors occurred. */
+ return NULL;
+}
+
+/******************************************************************************/
+
+EXPORT bool fexists(fn)
+char *fn;
+{
+ FILE *file;
+ bool success;
+
+ file=fopen(fn,"rb");
+ if (file==NULL)
+ return FALSE;
+
+ success= (fclose(file) != FCLOSE_F);
+ as_cold(success,
+ "fexists: Error closing file whose existence is being tested!");
+
+ return TRUE;
+}
+
+/******************************************************************************/
+
+EXPORT char *fn_temp()
+{
+ STAVAR uword filnum=1;
+ STAVAR fn_t fn;
+ do
+ {
+ sprintf(fn,"fwtf%04lu.tmp",(ulong) filnum);
+ filnum++;
+ }
+ while (fexists(fn));
+ return fn;
+}
+
+/******************************************************************************/
+
+EXPORT void strupper(s)
+char *s;
+{
+ while (*s != EOS)
+ {
+ *s=toupper(*s);
+ s++;
+ }
+}
+
+/******************************************************************************/
+/* End of MISC.C */
+/******************************************************************************/