summaryrefslogtreecommitdiff
path: root/macros/inrstex/inrsdoc/indsort.c
diff options
context:
space:
mode:
Diffstat (limited to 'macros/inrstex/inrsdoc/indsort.c')
-rw-r--r--macros/inrstex/inrsdoc/indsort.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/macros/inrstex/inrsdoc/indsort.c b/macros/inrstex/inrsdoc/indsort.c
new file mode 100644
index 0000000000..93b9f4dd24
--- /dev/null
+++ b/macros/inrstex/inrsdoc/indsort.c
@@ -0,0 +1,113 @@
+/*
+This reads a an unsorted index file *.ind and writes a sorted, and converted
+*.sor index file
+File Names are specialized to the INRSTeX reference book
+... DOS version uses strncmpi()
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <alloc.h>
+#include <ctype.h>
+
+#define NUL ((char)0)
+#define BSLASH ((char)0x5c)
+#define CR ((char)0x0d)
+#define LF ((char)0x0a)
+#define MAX 900
+#define CS 20
+#define SS 510
+#define PL 8
+/* type def */
+
+typedef struct {
+ char cmp_str[CS];
+ char *str;
+} ind;
+
+/* the variables */
+
+ FILE *outfile; /* out file. */
+ FILE *infile; /* input file */
+ char in_buf[512]; /* input buffer */
+ ind index[MAX];
+ char work[512];
+ int j, k, l, cp, in_len ; /* dummy vars */
+ int mem_over, op;
+
+/* Comparison Function */
+int sortfcn(const void *a, const void *b)
+ {
+ return (strcmpi(a,b));
+ }
+
+
+
+
+/*****
+* The main function.
+input file name is masth.ind output is masth.sor ... for inrstex ref book
+*****/
+void main()
+ {printf("\n INRSTeX index massage and sort. \n Input file is 'masth.ind'. \n Output file is 'masth.sor'.\n");
+ infile = fopen( "masth.ind", "r");
+ if (infile==0) printf("\n Sorry ... I can't find the index file \n `masth.ind` \n");
+ else {
+ outfile = fopen( "masth.sor", "w" );
+ j=0; while (j<MAX) {k=0; while (k<CS) {index[j].cmp_str[k]=' '; k++;}
+ j++; index[j].cmp_str[CS-1]=0;
+ }
+ mem_over=0;
+ cp=0;
+ while ((fgets(in_buf, 510, infile))&&(cp<MAX))
+ { in_len=strlen(in_buf);
+ index[cp].str=malloc(in_len);
+ if (index[cp].str==0) {mem_over=1;
+ printf("\n Memory Overflow");
+ break;
+ }
+ strncpy(index[cp].str, in_buf, SS-1);
+ j=0; k=0;
+ while ((j<CS-PL-1)&&(in_buf[k]!=LF))
+ { if (isalpha(in_buf[k])) {
+ index[cp].cmp_str[j]=in_buf[k];
+ j++;
+ }
+ k++;
+ }
+ if (j==5) {j=0; while (j<5) {index[cp].cmp_str[j]=' '; j++; } }
+ /* fix for single non-alphabetic commands */
+ cp++;
+ }
+ qsort((void *) index, cp, sizeof(ind), sortfcn);
+ printf("\n %d index records were read and sorted. \n", cp);
+ op=0;
+ while (op<cp)
+ {
+ strncpy(work, index[op].str, SS-1);
+ if (work[0]=='!')
+ {fputc(BSLASH,outfile);fputc('2',outfile);
+ k=1; while (work[k]!='!')
+ { if ((work[k]=='*')&&(work[k+1]=='/')&&(work[k+2]=='*'))
+ {fputc(LF,outfile); k++;k++;}
+ else
+ {fputc(work[k],outfile);
+ if (work[k]==BSLASH) fputc('1',outfile);
+ }
+ k++;
+ }
+
+ k++; while ((work[k]!=LF)&&(work[k]!=0))
+ {fputc(work[k],outfile); k++;}
+ fputc(LF,outfile);
+ }
+ op++;
+ }
+
+ fclose(infile); fclose(outfile);
+ }
+ }
+
+
+ \ No newline at end of file