Annotation of OpenXM/misc/packages/Windows/oxapp.c, Revision 1.3
1.3 ! takayama 1: /* $OpenXM: OpenXM/misc/packages/Windows/oxapp.c,v 1.2 2002/01/10 03:55:10 takayama Exp $ */
1.1 takayama 2: #include <stdio.h>
3: #define LINESIZE 4096
4:
1.2 takayama 5: int ThereIsLoad = 0;
1.1 takayama 6: main(int argc,char *argv[]) {
7: char s[LINESIZE];
1.2 takayama 8: int i;
1.1 takayama 9: int removeSharp = 0;
1.2 takayama 10: int checkLoad = 0;
11: extern ThereIsLoad;
12: for (i=1; i<argc; i++) {
1.3 ! takayama 13: if (strcmp(argv[i],"--removeSharp") == 0) {
! 14: removeSharp = 1;
! 15: }else if (strcmp(argv[i],"--load") == 0) {
! 16: checkLoad = 1;
! 17: }
1.1 takayama 18: }
19: while (fgets(s,LINESIZE,stdin) != NULL) {
1.3 ! takayama 20: if (strlen(s) >= LINESIZE-1) {
! 21: fprintf(stderr,"Too long line.\n");
! 22: exit(20);
! 23: }
! 24: edit(s);
! 25: if (removeSharp && s[0] == '#') {
! 26: printf("\n");
! 27: }else{
! 28: printf("%s",s);
! 29: }
1.1 takayama 30: }
31: if (removeSharp == 0) {
1.3 ! takayama 32: printf("end$\n");
1.1 takayama 33: }
1.2 takayama 34: if (checkLoad) {
1.3 ! takayama 35: fprintf(stderr,"checkLoad status = %d\n",ThereIsLoad);
! 36: if (ThereIsLoad) exit(0);
! 37: else exit(1);
1.2 takayama 38: }
1.1 takayama 39: }
40:
41: edit(char s[]) {
42: int k,i,j;
43: char t[LINESIZE*2];
1.2 takayama 44: extern int ThereIsLoad;
1.1 takayama 45: if (strlen(s) == 0) return;
46: t[0] = 0;
47: if ((k = find(s,"load(")) >= 0) {
1.3 ! takayama 48: if (k > 0 && not_separator(s[k-1]) ) return; /* bload */
! 49: /* Heuristic 1 */
! 50: if (k > 0) {
! 51: if (s[0] == 'i' && s[1] == 'f') return; /* if ... load */
! 52: }
! 53: /* Heuristic 2.A. load(User_asirrc)$ */
! 54: if (find(s,"load(User_asirrc)")>=0) {
! 55: s[0] = '\n'; s[1]=0;
! 56: return;
! 57: }
! 58: /* Heuristic 2 */
! 59: if (('A' <= s[k+5]) && (s[k+5] <= 'Z')) {
! 60: return; /* load(User_asirrc) */
! 61: }
! 62: /* Heuristic 3. load("./"+Fname) in phc */
! 63: if (find(s,"+Fname")>=0) return;
1.1 takayama 64:
1.3 ! takayama 65: for (i=0; i<k; i++) {
! 66: t[i] = s[i]; t[i+1] = 0;
! 67: }
1.1 takayama 68: strcat(t,"#include ");
1.3 ! takayama 69: ThereIsLoad = 1;
! 70: j=k+5;
! 71: for (i=strlen(t); i<LINESIZE*2-1; ) {
! 72: if (s[j] == 0) break;
! 73: if (s[j] == ')' || s[j] == ';' || s[j] == '$') {
! 74: j += 1;
! 75: }else{
! 76: t[i] = s[j]; t[i+1] = 0;
! 77: i++; j++;
! 78: }
! 79: }
! 80: if (strlen(t) >= LINESIZE-1) {
! 81: fprintf(stderr,"Too long string %s\n",t);
! 82: }
! 83: strcpy(s,t);
1.1 takayama 84: }
85: if ((k = find(s,"end$")) >= 0) {
1.3 ! takayama 86: if (k > 0 && not_separator(s[k-1])) return;
1.1 takayama 87: strcpy(s,"\n");
88: }
89: }
90:
91: find(char *s,char *substr) {
92: int n,m,i,j,k,k0;
93: n = strlen(s);
94: m = strlen(substr);
95: k0 = -1; k = -1;
96: for (i=0; i<n-m+1; i++) {
1.3 ! takayama 97: k = i;
! 98: for (j=0; j<m; j++) {
1.1 takayama 99: if (s[i+j] != substr[j]) {
1.3 ! takayama 100: k = -1; break;
! 101: }
! 102: }
1.1 takayama 103: if (k >= 0 && k0 >= 0) {
1.3 ! takayama 104: fprintf(stderr,"More than one appearances of %s\n",substr);
! 105: exit(20);
! 106: }
! 107: if (k >= 0) k0 = k;
1.1 takayama 108: }
109: return k0;
110: }
111:
112: not_separator(c) {
113: if (c >='A' && c <='Z') return 1;
114: if (c >='a' && c <='z') return 1;
115: if (c >='0' && c <='9') return 1;
116: if (c =='_') return 1;
117: return 0;
118: }
119:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>