int WriteCode ( struct listentry *first, char *code_srcdir, char *code_dstdir, int tablen, int fillcol ) { char *ctemp; /* char dirname[256];*/ DIR *opdir; struct listentry *tclist; struct dirent *dp; if ( code_srcdir[strlen(code_srcdir)-1] == '/' ) code_srcdir[strlen(code_srcdir)-1] = '\0'; opdir = opendir ( code_srcdir ); if ( !opdir ) { perror ( code_srcdir ); return -1; } for ( dp = readdir ( opdir ); dp != NULL; dp = readdir ( opdir ) ) { ctemp = strrchr ( dp->d_name, '.' ); if ( ctemp && ( strcmp ( ctemp, ".ttcn" ) == 0 ) ) { char fullname[MAXLEN]; char inbuf[1024]; FILE *rfile, *wfile; sprintf ( fullname, "%s/%s", code_srcdir, dp->d_name ); if ( ( rfile = fopen ( fullname, "rt") ) == NULL ) { perror ( fullname ); return -1; } while ( fgets ( inbuf, sizeof ( inbuf ), rfile ) != NULL ) { ctemp = strchr ( inbuf, 't' ); if ( ctemp && ( strncmp ( ctemp, "testcase", 8 ) == 0 ) ) { tclist = first; while ( tclist->next != NULL ) { ctemp = strchr ( inbuf, tclist->tcname[0] ); if ( ctemp && ( strncmp ( ctemp, tclist->tcname, strlen ( tclist->tcname ) ) == 0 ) ) { int indent = 0, comment = 0; int started = 0, needed = 1; sprintf ( fullname, "%s/%s.ttcn", code_dstdir, tclist->tcname ); if ( ( wfile = fopen ( fullname, "wt") ) == NULL ) { perror ( fullname ); return -1; } indent = GetIndent ( inbuf, strlen ( inbuf ), indent, comment ); if ( indent ) started = 1; TruncateLine ( inbuf, strlen ( inbuf ), tablen, fillcol, wfile ); while ( needed ) { if ( fgets ( inbuf, sizeof ( inbuf ), rfile ) == NULL ) break; indent = GetIndent ( inbuf, strlen ( inbuf ), indent, comment ); if ( ! started && indent ) started = 1; if ( started && ! indent ) needed = 0; TruncateLine ( inbuf, strlen ( inbuf ), tablen, fillcol, wfile ); } fclose ( wfile ); } tclist = tclist->next; } } } fclose ( rfile ); } } if ( closedir ( opdir ) != 0 ) { perror ( code_srcdir ); return -1; } return 0; }
int WriteDump ( struct listentry *first, char *dump_srcdir, char *dump_dstdir, int tablen, int fillcol ) { /* char *ctemp; char dirname[256];*/ char fullname[MAXLEN]; DIR *opdir; struct listentry *tclist; struct dirent *dp; if ( dump_srcdir[strlen(dump_srcdir)-1] == '/' ) dump_srcdir[strlen(dump_srcdir)-1] = '\0'; opdir = opendir ( dump_srcdir ); if ( !opdir ) { perror ( dump_srcdir ); return -1; } for ( dp = readdir ( opdir ); dp != NULL; dp = readdir ( opdir ) ) { if ( ( strcmp ( dp->d_name, ".." ) == 0 ) || ( strcmp ( dp->d_name, "." ) == 0 ) ) continue; tclist = first; while ( tclist->next != NULL ) { sprintf ( fullname, "%s.dump", tclist->tcname ); if ( strcmp ( dp->d_name, fullname ) == 0 ) { char inbuf[1024]; FILE *rfile, *wfile; sprintf ( fullname, "%s/%s", dump_srcdir, dp->d_name ); if ( ( rfile = fopen ( fullname, "rt") ) == NULL ) { perror ( fullname ); return -1; } sprintf ( fullname, "%s/%s.dump", dump_dstdir, tclist->tcname ); if ( ( wfile = fopen ( fullname, "wt") ) == NULL ) { perror ( fullname ); return -1; } while ( fgets ( inbuf, sizeof ( inbuf ), rfile ) != NULL ) { GetIndent ( inbuf, strlen ( inbuf ), 0, 0 ); TruncateLine ( inbuf, strlen ( inbuf ), tablen, fillcol, wfile ); } fclose ( rfile ); fclose ( wfile ); } tclist = tclist->next; } } if ( closedir ( opdir ) != 0 ) { perror ( dump_srcdir ); return -1; } return 0; }
WORD NEAR LoadLine(PSTR line, int *lineLen, int nbLines) { char prevCh = 0; register char ch; int level = NON_VALID_LEVEL; int extLineLen = 0; int totLen; *lineLen = 0; while (TRUE) { //Load next char, don't call LoadChar function to go faster if (dwOffsetDoc < dwBytesReadDoc) { ch = (char)pszBufferDoc[dwOffsetDoc++]; } else if (dwBytesReadDoc < DISK_BLOCK_SIZE) { ch = CTRL_Z; } else { if (!ReadFile(hFileDoc, pszBufferDoc, DISK_BLOCK_SIZE, &dwBytesReadDoc, NULL)) { return ERR_File_Read; } else { if (dwBytesReadDoc == 0) { ch = CTRL_Z; } else { ch = (char)pszBufferDoc[0]; } } dwOffsetDoc = 1; } switch (ch) { case CR: break; case LF: if (*lineLen > MAX_USER_LINE) { if (TruncateLine(line, nbLines)) { (*lineLen)--; } else { return END_ABORT; } } return END_OF_LINE; case TAB: { int i; //Calc number of spaces to insert totLen = extLineLen; i = g_contGlobalPreferences_WkSp.m_nTabSize - (totLen % g_contGlobalPreferences_WkSp.m_nTabSize); if (totLen + i >= MAX_USER_LINE) { if (TruncateLine(line, nbLines)) { char k; //Padd blanks until end of line or remove char (*lineLen)--; //Discard rest of line from input file do { k = LoadChar(); } while (k != - 1 && k != CTRL_Z && k != LF); switch (k) { case -1: return ERR_File_Read; case LF: return END_OF_LINE; case CTRL_Z: return END_OF_FILE; } return END_OF_LINE; } else return END_ABORT; } //Skip if we keep the tab extLineLen += i; goto defaut; //Insert spaces otherwise while (i--) line[(*lineLen)++] = ' '; break; } case CTRL_Z: return END_OF_FILE; default: defaut: totLen = extLineLen; if (totLen > MAX_USER_LINE) { if (TruncateLine(line, nbLines)) { char k; (*lineLen)--; //Discard rest of line from input file do { k = LoadChar(); } while (k != - 1 && k != CTRL_Z && k != LF); switch (k) { case -1: return ERR_File_Read; case LF: return END_OF_LINE; case CTRL_Z: return END_OF_FILE; } return END_OF_LINE; } else return END_ABORT; } line[(*lineLen)++] = (char)ch; extLineLen++; } prevCh = ch; } } /* LoadLine() */