Beispiel #1
0
/*
 * UndoDeleteFcbs - set up transaction to undo the deletion of fcbs
 */
void UndoDeleteFcbs( linenum sline, fcb_list *fcblist, undo_stack *stack )
{
    undo        *cundo;

    /*
     * set up undo entry
     */
    if( stack == NULL || stack->current < 0 || !EditFlags.Undo ) {
        return;
    }
    cundo = UndoAlloc( stack, UNDO_DELETE_FCBS );
    if( cundo == NULL ) {
        return;
    }
    AddUndoToCurrent( cundo, stack );

    /*
     * set up start line in fcb head
     */
    numberLines( fcblist->head, sline );

    /*
     * save the data
     */
    cundo->data.fcbs = *fcblist;

} /* UndoDeleteFcbs */
Beispiel #2
0
/*
 * PatchDeleteUndo - go and patch together undo deletes
 */
void PatchDeleteUndo( undo_stack *stack )
{
    undo        *top, *next, *del, *topdel, *after, *tmp;
    bool        merge;

    /*
     * see if we can merge this with the last undo record
     * (provided we are in an open undo group)
     *
     * we need the following undo sequence, after the first one:
     * END_UNDO_GROUP
     * UNDO_DELETE_FCBS
     *      - must have same start line as the first one
     * START_UNDO_GROUP
     */
    if( stack == NULL || stack->OpenUndo <= 0 || stack->current < 0 ||
        !EditFlags.Undo ) {
        return;
    }
    top = stack->stack[stack->current];
    topdel = top->next;
    next = top->next->next->next;   /* go past first delete group */
    if( next == NULL || next->type != END_UNDO_GROUP ) {
        return;
    }
    next = next->next;
    if( next == NULL || next->type != UNDO_DELETE_FCBS ) {
        return;
    }
    del = next;
    next = next->next;
    if( next == NULL || next->type != START_UNDO_GROUP ) {
        return;
    }
    after = next->next;

    /*
     * if two starts are the same, then these are back-to-back deletes
     * and we can merge them.
     */
    merge = FALSE;
    if( del->data.fcbs.head->start_line == topdel->data.fcbs.head->start_line ) {
        merge = TRUE;
    }

    /*
     * merge data two records together
     */
    if( merge ) {
        /*
         * join fcbs from the two undo records: the fcbs
         * from the 2nd record become the head fcbs, and
         * the fcbs from the 2nd record follow them.
         */
        del->data.fcbs.tail->next = topdel->data.fcbs.head;
        topdel->data.fcbs.head->prev = del->data.fcbs.tail;
        topdel->data.fcbs.head = del->data.fcbs.head;
        numberLines( topdel->data.fcbs.head, topdel->data.fcbs.head->start_line );

        /*
         * join the top undo sequence with the third one
         */
        next = top->next->next->next;   /* go past first delete group */
        top->next->next->next = after;  /* join first undo group to third */

        /*
         * delete the END_UNDO_GROUP, UNDO_DELETE_FCBS,
         * and START_UNDO_GROUP records for the 2nd entry
         */
        tmp = next->next;
        MemFree( next );
        next = tmp;
        tmp = next->next;
        MemFree( next );
        MemFree( tmp );

        /*
         * merge the line data from the fcbs together
         */
        MergeAllFcbs( &topdel->data.fcbs );
    }

} /* PatchDeleteUndo */
Beispiel #3
0
int main(void){

	FILE *inputFile = NULL, *outputFileStats = NULL, *outputFileAscii = NULL;
	char c1 = '\0', c2 = '\0', c3 = '\0', c4 = '\0', c5 = '\0', c6 = '\0', c7 = '\0', c8 = '\0', c9 = '\0', c10 = '\0';
	int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0, num6 = 0, num7 = 0, num8 = 0, num9 = 0, num10 = 0, numLines = 0, 
		numVowels = 0, numDigits = 0, numAlpha = 0, numLower = 0, numUpper = 0, numSpace = 0, numAlnum = 0, numPunct = 0;

	inputFile = openInputFile();
	outputFileStats = fopen("output_stats.dat", "w");
	outputFileAscii = fopen("output_ascii.dat", "w");

	if (inputFile != NULL && outputFileStats != NULL && outputFileAscii != NULL){
		c1 = readCharacter(inputFile);
		c2 = readCharacter(inputFile);
		c3 = readCharacter(inputFile);
		c4 = readCharacter(inputFile);
		c5 = readCharacter(inputFile);
		c6 = readCharacter(inputFile);
		c7 = readCharacter(inputFile);
		c8 = readCharacter(inputFile);
		c9 = readCharacter(inputFile);
		c10 = readCharacter(inputFile);

		num1 = determineAsciiValue(c1);
		num2 = determineAsciiValue(c2);
		num3 = determineAsciiValue(c3);
		num4 = determineAsciiValue(c4);
		num5 = determineAsciiValue(c5);
		num6 = determineAsciiValue(c6);
		num7 = determineAsciiValue(c7);
		num8 = determineAsciiValue(c8);
		num9 = determineAsciiValue(c9);
		num10 = determineAsciiValue(c10);

		printInt(outputFileAscii, num1);
		printInt(outputFileAscii, num2);
		printInt(outputFileAscii, num3);
		printInt(outputFileAscii, num4);
		printInt(outputFileAscii, num5);
		printInt(outputFileAscii, num6);
		printInt(outputFileAscii, num7);
		printInt(outputFileAscii, num8);
		printInt(outputFileAscii, num9);
		printInt(outputFileAscii, num10);

		numLines = numberLines(c1, numLines);
		numLines = numberLines(c2, numLines);
		numLines = numberLines(c3, numLines);
		numLines = numberLines(c4, numLines);
		numLines = numberLines(c5, numLines);
		numLines = numberLines(c6, numLines);
		numLines = numberLines(c7, numLines);
		numLines = numberLines(c8, numLines);
		numLines = numberLines(c9, numLines);
		numLines = numberLines(c10, numLines);
		printStats(outputFileStats, "Number Lines: ", numLines);

		numVowels = numberVowels(c1, numVowels);
		numVowels = numberVowels(c2, numVowels);
		numVowels = numberVowels(c3, numVowels);
		numVowels = numberVowels(c4, numVowels);
		numVowels = numberVowels(c5, numVowels);
		numVowels = numberVowels(c6, numVowels);
		numVowels = numberVowels(c7, numVowels);
		numVowels = numberVowels(c8, numVowels);
		numVowels = numberVowels(c9, numVowels);
		numVowels = numberVowels(c10, numVowels);
		printStats(outputFileStats, "Number Vowels: ", numVowels);

		numDigits = numberDigits(c1, numDigits);
		numDigits = numberDigits(c2, numDigits);
		numDigits = numberDigits(c3, numDigits);
		numDigits = numberDigits(c4, numDigits);
		numDigits = numberDigits(c5, numDigits);
		numDigits = numberDigits(c6, numDigits);
		numDigits = numberDigits(c7, numDigits);
		numDigits = numberDigits(c8, numDigits);
		numDigits = numberDigits(c9, numDigits);
		numDigits = numberDigits(c10, numDigits);
		printStats(outputFileStats, "Number Digits: ", numDigits);
			
		numAlpha = numberAlphas(c1, numAlpha);
		numAlpha = numberAlphas(c2, numAlpha);
		numAlpha = numberAlphas(c3, numAlpha);
		numAlpha = numberAlphas(c4, numAlpha);
		numAlpha = numberAlphas(c5, numAlpha);
		numAlpha = numberAlphas(c6, numAlpha);
		numAlpha = numberAlphas(c7, numAlpha);
		numAlpha = numberAlphas(c8, numAlpha);
		numAlpha = numberAlphas(c9, numAlpha);
		numAlpha = numberAlphas(c10, numAlpha);
		printStats(outputFileStats, "Number Alpha Characters: ", numAlpha);

		numLower = numberLowers(c1, numLower);
		numLower = numberLowers(c2, numLower);
		numLower = numberLowers(c3, numLower);
		numLower = numberLowers(c4, numLower);
		numLower = numberLowers(c5, numLower);
		numLower = numberLowers(c6, numLower);
		numLower = numberLowers(c7, numLower);
		numLower = numberLowers(c8, numLower);
		numLower = numberLowers(c9, numLower);
		numLower = numberLowers(c10, numLower);
		printStats(outputFileStats, "Number Lowercase Characters: ", numLower);

		numUpper = numberUppers(c1, numUpper);
		numUpper = numberUppers(c2, numUpper);
		numUpper = numberUppers(c3, numUpper);
		numUpper = numberUppers(c4, numUpper);
		numUpper = numberUppers(c5, numUpper);
		numUpper = numberUppers(c6, numUpper);
		numUpper = numberUppers(c7, numUpper);
		numUpper = numberUppers(c8, numUpper);
		numUpper = numberUppers(c9, numUpper);
		numUpper = numberUppers(c10, numUpper);
		printStats(outputFileStats, "Number Uppercase Characters: ", numUpper);

		numSpace = numberSpaces(c1, numSpace);
		numSpace = numberSpaces(c2, numSpace);
		numSpace = numberSpaces(c3, numSpace);
		numSpace = numberSpaces(c4, numSpace);
		numSpace = numberSpaces(c5, numSpace);
		numSpace = numberSpaces(c6, numSpace);
		numSpace = numberSpaces(c7, numSpace);
		numSpace = numberSpaces(c8, numSpace);
		numSpace = numberSpaces(c9, numSpace);
		numSpace = numberSpaces(c10, numSpace);
		printStats(outputFileStats, "Number Whitespaces: ", numSpace);
			
		numAlnum = numberAlnums(c1, numAlnum);
		numAlnum = numberAlnums(c2, numAlnum);
		numAlnum = numberAlnums(c3, numAlnum);
		numAlnum = numberAlnums(c4, numAlnum);
		numAlnum = numberAlnums(c5, numAlnum);
		numAlnum = numberAlnums(c6, numAlnum);
		numAlnum = numberAlnums(c7, numAlnum);
		numAlnum = numberAlnums(c8, numAlnum);
		numAlnum = numberAlnums(c9, numAlnum);
		numAlnum = numberAlnums(c10, numAlnum);
		printStats(outputFileStats, "Number Alphanumeric Characters: ", numAlnum);

		numPunct = numberPuncts(c1, numPunct);
		numPunct = numberPuncts(c2, numPunct);
		numPunct = numberPuncts(c3, numPunct);
		numPunct = numberPuncts(c4, numPunct);
		numPunct = numberPuncts(c5, numPunct);
		numPunct = numberPuncts(c6, numPunct);
		numPunct = numberPuncts(c7, numPunct);
		numPunct = numberPuncts(c8, numPunct);
		numPunct = numberPuncts(c9, numPunct);
		numPunct = numberPuncts(c10, numPunct);
		printStats(outputFileStats, "Number Punctuation Characters: ", numPunct);

		fclose(inputFile);
		fclose(outputFileAscii);
		fclose(outputFileStats);
	}

	return 0;
}