|
|
1.1 ! root 1: /* MAN.C */ ! 2: ! 3: /* Synchronet docs convert to paged format for printing */ ! 4: ! 5: #include <stdio.h> ! 6: #include <string.h> ! 7: #include <stdlib.h> ! 8: #include <dos.h> ! 9: #include <io.h> ! 10: #include <alloc.h> ! 11: ! 12: /****************************************************************************/ ! 13: /* Truncates white-space chars off end of 'str' and terminates at first tab */ ! 14: /****************************************************************************/ ! 15: void truncsp(char *str) ! 16: { ! 17: char c; ! 18: ! 19: str[strcspn(str,"\t")]=0; ! 20: c=strlen(str); ! 21: while(c && (unsigned char)str[c-1]<=32) c--; ! 22: str[c]=0; ! 23: } ! 24: ! 25: int main(int argc, char **argv) ! 26: { ! 27: char str[256],str2[256],infile[128],outfile[128],idxfile[128] ! 28: ,*invbuf,*outvbuf,*idxvbuf,*tempvbuf,*p,*p2 ! 29: ,chap[128]="SBBSecho" ! 30: ,pagetag[250][9] ! 31: ,idxtag[512][9]; ! 32: int i,j,page=1,line=0,pagetags=0,idxtags=0; ! 33: long pageidx[250],idx[512],l; ! 34: FILE *in, *out, *index, *tempfile; ! 35: ! 36: if(argc<3) { ! 37: printf("usage: man infile outfile indexfile\r\n"); ! 38: exit(1); } ! 39: ! 40: strcpy(infile,argv[1]); ! 41: strcpy(outfile,argv[2]); ! 42: strcpy(idxfile,argv[3]); ! 43: ! 44: if((in=fopen(infile,"rb"))==NULL) { ! 45: printf("error opening %s\r\n",infile); ! 46: exit(1); } ! 47: ! 48: if((out=fopen(outfile,"wb"))==NULL) { ! 49: printf("error opening %s\r\n",outfile); ! 50: exit(1); } ! 51: ! 52: //if((index=fopen(idxfile,"rb"))==NULL) { ! 53: // printf("error opening %s\r\n",idxfile); ! 54: // exit(1); } ! 55: ! 56: //if((tempfile=fopen("TEMPFILE","w+b"))==NULL) { ! 57: // printf("error opening TEMPFILE\r\n"); ! 58: // exit(1); } ! 59: ! 60: if((invbuf=(char *)malloc(8*1024))==NULL) { ! 61: printf("error allocating input buffer\n"); ! 62: exit(1); } ! 63: ! 64: if((outvbuf=(char *)malloc(8*1024))==NULL) { ! 65: printf("error allocating output buffer\n"); ! 66: exit(1); } ! 67: ! 68: //if((idxvbuf=(char *)malloc(8*1024))==NULL) { ! 69: // printf("error allocating index buffer\n"); ! 70: // exit(1); } ! 71: ! 72: //if((tempvbuf=(char *)malloc(8*1024))==NULL) { ! 73: // printf("error allocating temp buffer\n"); ! 74: // exit(1); } ! 75: ! 76: setvbuf(in,invbuf,_IOFBF,8*1024); ! 77: setvbuf(out,outvbuf,_IOFBF,8*1024); ! 78: //setvbuf(index,idxvbuf,_IOFBF,8*1024); ! 79: //setvbuf(tempfile,tempvbuf,_IOFBF,8*1024); ! 80: ! 81: //while(!ferror(index) && !feof(index)) { ! 82: // p=fgets(str,128,index); ! 83: // fputs(str,tempfile); ! 84: // while((p2=strstr(str,"@@"))!=NULL) { ! 85: // p2[0]=32; ! 86: // p2[1]=32; ! 87: // sprintf(idxtag[idxtags],"%-.8s",p2+2); ! 88: // idx[idxtags++]=ftell(index)-strlen(p2); } } ! 89: ! 90: while(!ferror(in) && !feof(in)) { ! 91: p=fgets(str,128,in); ! 92: if(str[0]=='&' && str[1]=='&') { ! 93: truncsp(str+2); ! 94: strcpy(chap,str+2); ! 95: continue; } ! 96: if(str[0]=='$' && str[1]=='$') { ! 97: truncsp(str+2); ! 98: ! 99: // for(i=0;i<idxtags;i++) { ! 100: // if(!stricmp(str+2,idxtag[i])) { ! 101: // fseek(tempfile,idx[i],SEEK_SET); ! 102: // sprintf(str2,"%-10d",page); ! 103: // fprintf(tempfile,"%s",str2); } } ! 104: ! 105: for(i=0;i<pagetags;i++) ! 106: if(!stricmp(str+2,pagetag[i])) ! 107: break; ! 108: if(i<pagetags) { ! 109: l=ftell(out); ! 110: fseek(out,pageidx[i]-1,SEEK_SET); ! 111: sprintf(str,"%10d",page); ! 112: for(i=0;i<10;i++) ! 113: if(str[i]==0x20) ! 114: str[i]='.'; ! 115: fprintf(out,"%s",str); ! 116: fseek(out,l,SEEK_SET); } ! 117: continue; } ! 118: ! 119: line++; ! 120: if(!p) ! 121: break; ! 122: if(!p || str[0]==0xc || line==55) { ! 123: while(line<55) { ! 124: fprintf(out,"\r\n"); ! 125: line++; } ! 126: line=1; ! 127: if(page!=1) /* no tag on page 1 */ ! 128: fprintf(out,"\r\n___________________________________________" ! 129: "____________________________________\r\n" ! 130: "%-35s %3u %39s" ! 131: ,"SBBSecho",page,chap); ! 132: fprintf(out,"\r\n\xc\r\n\r\n"); ! 133: page++; } ! 134: ! 135: if((p2=strstr(str,"@@"))!=NULL) { ! 136: sprintf(pagetag[pagetags],"%-.8s",p2+2); ! 137: pageidx[pagetags++]=ftell(out)+(p2-str)+1; } ! 138: ! 139: if(!p) ! 140: break; ! 141: if(str[0]!=0xc) ! 142: fprintf(out,"%s",str); ! 143: else ! 144: line=0; ! 145: } ! 146: ! 147: //fseek(tempfile,0L,SEEK_SET); ! 148: //while(!ferror(tempfile) && !feof(tempfile)) { ! 149: // j=0; ! 150: // p=fgets(str2,128,tempfile); ! 151: // for(i=0;i<strlen(str2);i++) { ! 152: // str[j++]=str2[i]; ! 153: // if(str2[i]==',') { ! 154: // i++; ! 155: // str[j++]=str2[i++]; ! 156: // while(1) { ! 157: // if(str2[i]>32 && isdigit(str2[i])) ! 158: // str[j++]=str2[i++]; ! 159: // else ! 160: // break; } ! 161: // while(str2[i++]==32); ! 162: // i-=2; } } ! 163: // str[j]=0; ! 164: ! 165: // line++; ! 166: // if(!p || str[0]==0xc || line==55) { ! 167: // while(line<55) { ! 168: // fprintf(out,"\r\n"); ! 169: // line++; } ! 170: // line=1; ! 171: // if(page!=1) /* no tag on page 1 */ ! 172: // fprintf(out,"\r\n\t___________________________________________" ! 173: // "____________________________________\r\n" ! 174: // "\t%-35s %3u %39s" ! 175: // ,"Synchronet",page,"Index"); ! 176: // fprintf(out,"\r\n\xc\r\n\r\n"); ! 177: // page++; } ! 178: ! 179: // if(!p) ! 180: // break; ! 181: // if(str[0]!=0xc) ! 182: // fprintf(out,"\t%s",str); ! 183: // else ! 184: // line=0; ! 185: // } ! 186: return(0); ! 187: } ! 188: ! 189:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.