#define O_RDONLY 0 #define O_WRONLY 1 #define O_RWRITE 2 #define O_APPEND 3 int getc() { int c; /*fd, buffer, numBytes*/ read(0, &c, 1); if (c==4) return 0; /*Control_D key*/ return (c & 0x7F); }/*end int getc()*/ int putc(int c) { /*fd, buffer, numBytes*/ write(1, &c, 1); /*I added this next line*/ return 1; }/*end putc(int c)*/ int gets(char* s) { /*fd, buffer, numBytes*/ return read(0, s, 1024); }/*end int gets(char* s)*/ prints(char* s) { /*fd, buffer, numBytes*/ write(1, s, strlen(s)); }/*end prints(char* )*/ /**** YOUR printf(), etc. *****/ int printchar(int x) { putc( x ); return 0; }/*end printchar*/ int printint(int x) { if(0 == x) { /*putc('0');*/ }/*omit extra zeros*/ else { printint( x / 10 ); putc('0' + (x % 10) ); }/**/ return 0; }/*end printint*/ int printhex(int x) { if(x>15) { printhex(x/16); }/*end if greater than one byte*/ if((x%16)<10) { putc('0' + (x%16)); }/*end if less than 10, print integer*/ else { putc('A' - 10 + (x%16)); }/*end if 10 or greater, do alphabetic stuff*/ return 0; }/*end printhex*/ /*the big boy! formatted print!*/ int printf(char* s) { char theChar; char argType; /* int* bp = getbp(); originally used getbp()...but during debugging I changed it to this and this works...so why not keep it? */ int* bp = &s; /*first arg is at bp+3, so set this to 2 and let the rest of the code increment as needed*/ int stackOffset = 2; while(*s) { /*get char and advance*/ theChar = *s++; if('%' == theChar) { /*get char and advance*/ argType = *s++; if('c' == argType) { printchar( *(bp+(++stackOffset)) ); }/*end if is char, print it*/ else if('d' == argType) { printint( *(bp+(++stackOffset)) ); }/*end int types*/ else if('x' == argType) { printhex( *(bp+(++stackOffset)) ); }/*end hex type*/ else if('s' == argType) { prints( *(bp+(++stackOffset)) ); }/*end string case*/ else { prints("myprintf blew up, bad arg type"); }/*end bad arg type*/ }/*end 'if is an escape character'*/ else { /*putc(*s++);*/ putc(theChar); }/*end 'not an escape character'*/ }/*end while*/ }/*end prints*/ /**************END STRING FUNCTIONS*****************/