예제 #1
0
// MAIN.
int main(int argc, char **argv)
{
	// Referencia al archivo que se leerá.
	FILE *entrada;

	// Abrir el archivo de entrada.
	entrada = fopen(argv[1], "r");

	if(entrada == NULL)
	{
		fprintf(stdout, "Error al leer archivo de entrada.\n");
		return 1;
	}
	else if(argv[2] == NULL)
	{
		fprintf(stdout, "Ingrese parámetro de salida.\n");
	}
	else
	{
		if(strcmp(argv[2], "-d") == 0)
		{
			Decimal(entrada);		// Imprimir en formato decimal.
		}
		else if(strcmp(argv[2], "-o") == 0)
		{
			Octal(entrada);			// Imprimir en formato octal.
		}
		else if(strcmp(argv[2], "-x") == 0)
		{
			Hexadecimal(entrada);	// Imprimir en formato hexadecimal.
		}
	}

	return 0;
}
예제 #2
0
파일: read.c 프로젝트: s-cherepanov/elk
/*ARGSUSED*/
Object Read_Char (Object port, int chr, int konst) {
    int c, str;
    FILE *f;
    char buf[10], *p = buf;

    f = PORT(port)->file;
    str = PORT(port)->flags & P_STRING;
    Reader_Getc;
    if (c == EOF)
        Reader_Sharp_Eof;
    *p++ = c;
    while (1) {
        Reader_Getc;
        if (c == EOF)
            Reader_Sharp_Eof;
        if (Whitespace (c) || Delimiter (c))
            break;
        if (p == buf+9)
            Reader_Error (port, "syntax error in character constant");
        *p++ = c;
    }
    Reader_Ungetc;
    if (p == buf+1)
        return Make_Char (*buf);
    *p = '\0';
    if (p == buf+3) {
        for (c = 0, p = buf; p < buf+3 && Octal (*p); p++)
            c = c << 3 | (*p - '0');
        if (p == buf+3)
            return Make_Char (c);
    }
    for (p = buf; *p; p++)
        if (isupper (*p))
            *p = tolower (*p);
    if (strcmp (buf, "space") == 0)
        return Make_Char (' ');
    if (strcmp (buf, "newline") == 0)
        return Make_Char ('\n');
    if (strcmp (buf, "return") == 0)
        return Make_Char ('\r');
    if (strcmp (buf, "tab") == 0)
        return Make_Char ('\t');
    if (strcmp (buf, "formfeed") == 0)
        return Make_Char ('\f');
    if (strcmp (buf, "backspace") == 0)
        return Make_Char ('\b');
    Reader_Error (port, "syntax error in character constant");
    /*NOTREACHED*/
}
예제 #3
0
파일: read.c 프로젝트: s-cherepanov/elk
Object Read_String (Object port, int konst) {
    register FILE *f;
    register int n, c, oc, str;

    Read_Reset ();
    f = PORT(port)->file;
    str = PORT(port)->flags & P_STRING;
    while (1) {
        Reader_Getc;
        if (c == EOF) {
eof:
            Reader_Tweak_Stream;
            Reader_Error (port, "end of file in string");
        }
        if (c == '\\') {
            Reader_Getc;
            switch (c) {
            case EOF: goto eof;
            case 'b': c = '\b'; break;
            case 't': c = '\t'; break;
            case 'r': c = '\r'; break;
            case 'n': c = '\n'; break;
            case '0': case '1': case '2': case '3':
            case '4': case '5': case '6': case '7':
                oc = n = 0;
                do {
                    oc <<= 3; oc += c - '0';
                    Reader_Getc;
                    if (c == EOF) goto eof;
                } while (Octal (c) && ++n <= 2);
                Reader_Ungetc;
                c = oc;
            }
        } else if (c == '"')
            break;
        Read_Store (c);
    }
    return General_Make_String (Read_Buf, Read_Size, konst);
}