Beispiel #1
0
void printf(char *fmt, ...)
{
    unsigned short bp;
    char **cp;
    char *fmtStr;
    int *ip;
    char tmp;
    
    bp = getbp();
    //printf("bp = %x\n", bp); // For testing
    cp = (char**)(bp+4);
    //printf("cp = %x, *cp = %c\n", cp, **cp); // For testing
    fmtStr = *cp;
    //printf("fmtStr = %s", fmtStr);
    ip = (uint16_t *)(bp+6);
    //printf("ip = %x\n", ip); // For testing

    while(*fmtStr != 0)
    {
        if(*fmtStr == '%')
        {
            fmtStr++;
            switch(*fmtStr)
            {
                case 'c': tmp = (char)*ip;
                        putc(tmp);

                        break;
                case 's': prints((char *)(*ip));
                        break;
                case 'd': printd((int)*ip);
                        break;
                case 'x': printx((uint16_t)*ip);
                        break;
                case 'u': printu((uint16_t)*ip);
                        break;
                case 'l': ip++; 
                        printu((uint32_t)*ip);
                        break;
                default:
                    prints(" Invalid format specifier ");
                    break;
            }
            //fflush(stdout);
            ip++;
        }
        else
        {
            putc(*fmtStr);
            //fflush(stdout);
            if(*fmtStr == '\n')
            {
                putc('\r');
            }
        }
        fmtStr++;
    }

}
Beispiel #2
0
void myprintf(char *fmt, ...)
{
    int i = 0;
    char *cp;
    int *bp;
    int *ip;
    int retPC;
    
    cp = fmt;
    bp = (int *)getbp();
    ip = bp;
    retPC = *(ip++);
    // To make ip point to first argument, we have to iterate it by 2
    ip += 2;


    
    i = 0;
    // We loop through the string.
    while(fmt[i] != '\0')
    {
        if(fmt[i] == '\n')  // Case where character is a newline
        {
            putc('\n');
            putc('\r');
        }
        else if(fmt[i] == '%')  // User wants to print either a char, string, int, etc.
        {
            char *cPtr = 0;
            switch(fmt[++i])
            {
                case 's':
                    cPtr = (char *)*ip;
                    prints(cPtr);
                    break;
                case 'u':
                    printu(*ip);    
                    break;
                case 'd':
                    printd(*ip);
                    break;
                case 'o':
                    printo(*ip);
                    break;
                case 'x':
                    printx(*ip);
                    break;
                case 'c':
                    putc(*ip);
                    break;
                default:
                    break;
            }
            ip++;
        }
        else
        {
            putc(fmt[i]);    // Case where just a regular character
        }
        i++;
    }
    
    return;
}