include ratfor.def /************************************************************************ * doback -do the C style backslash processing * * * * usage: foo = doback(string,size) * * where: string =the string to convert, does not include * * backslash * * size =th number of characters in the symbol. * * doback =byte, the resulting character. * * or -1 if an error. * * * * note: Doback recognizes the following constructs * * '\b' back space * * '\e' escape * * '\f' form feed * * '\l' line feed * * '\n' newline (CR then LF) * * '\r' carriage return * * '\t' tab * * '\\' \ * * '\^*' control-* * * '\ddd' ddd, ddd is in OCTAL. * * * * The value of the function is an integer, not character. * * This is done to allow the user to distinguish between * * an error and a legal character. * * * * Sometimes doback returns a -2, which is the code for * * \n. * ************************************************************************/ integer function doback(str,size) character str(1) integer size integer i size = 1 if(str(1) == 'b') #backspace doback = BACKWARDS else if(str(1) == 'e') #escape doback = ESC else if(str(1) == 'f') #form feed doback = FF else if(str(1) == 'l') #line feed doback = newline else if(str(1) == 'n') #new line doback = -2 #magic value else if(str(1) == 'r') #carriage return doback = cr else if(str(1) == 't') #tab doback = tab else if(str(1) >= '0' & str(1) <= '7') { #\ddd doback = 0 for(i = 1;str(i) >= '0' & str(i) <= '7' & i <= 3;i = i + 1) doback = doback*8 + (str(i) - '0') size = i - 1 } else if(str(1) == '^') { #this is a control character size = 2 i = str(2) #convert to integer doback = i .and. 31 # and mask off top bits } else if(str(1) == 0) { doback = 0 size = 0 } else doback = str(1) return end