X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=as%2Fmcs51%2Flklex.c;h=daaa4f32c3dd16f132ca01f1b984f1852ef8ed8d;hb=8179aae7c86bde07e4e0b70b4f8ed4e7f0be74f1;hp=5e894e152af37f56d80a81405cf1d094a54570e1;hpb=f93eb1eafde8985b8634d476b01641de63124b9e;p=fw%2Fsdcc diff --git a/as/mcs51/lklex.c b/as/mcs51/lklex.c index 5e894e15..daaa4f32 100644 --- a/as/mcs51/lklex.c +++ b/as/mcs51/lklex.c @@ -11,9 +11,6 @@ #include #include -#if !defined(_MSC_VER) -#include -#endif #include "aslink.h" /*)Module lklex.c @@ -26,6 +23,7 @@ * char get() * VOID getfid() * VOID getid() + * VOID getSid() * int getline() * int getmap() * char getnb() @@ -97,20 +95,78 @@ char *id; *p++ = 0; } +/*)Function VOID getSid (char *id) + * + * char * id a pointer to a string of + * maximum length NCPS + * + * getSid is derived from getid. It is called from newsym() + * in lksym.c, when an S-record has to be scanned. getSid accepts + * much more characters than getid, which is necessary for SDCC. + * + * The function getSid() scans the current input text line + * from the current position copying the next string + * into the external string buffer (id). The string ends when a space + * character (space, tab, \0) is found. The maximum number of + * characters copied is NCPS. If the input string is larger than + * NCPS characters then the string is truncated, if the input string + * is shorter than NCPS characters then the string is NULL filled. + * Intervening white space (SPACES and TABS) are skipped. + * + * local variables: + * char * p pointer to external string buffer + * int c current character value + * + * global variables: + * char ctype[] a character array which defines the + * type of character being processed. + * This index is the character + * being processed. + * + * called functions: + * char get() lklex.c + * char getnb() lklex.c + * VOID unget() lklex.c + * + * side effects: + * use of getnb(), get(), and unget() updates the + * global pointer ip the position in the current + * input text line. + */ + +VOID +getSid (id) +char *id; +{ + register int c; + register char *p; + + c = getnb(); + p = id; + do { + if (p < &id[NCPS]) + *p++ = c; + c = get(); + } while (c != '\0' && c != ' ' && c != '\t'); + unget(c); + while (p < &id[NCPS]) + *p++ = 0; +} + /*)Function VOID getfid(fid,c) * * char * str a pointer to a string of - * maximum length FILSPC + * maximum length PATH_MAX * int c this is first character to * copy to the string buffer * - * The function getfid() scans the current input text line - * from the current position copying the next string - * into the external string buffer (str). The string ends when a - * non SPACE type character is found. The maximum number of - * characters copied is FILSPC. If the input string is larger than - * FILSPC characters then the string is truncated, if the input string - * is shorter than FILSPC characters then the string is NULL filled. + * The function getfid() scans the current input text line from + * the current position copying the next string into the external + * string buffer (str). The string ends when end of line is found. + * Trailing spacers are removed. The maximum number of characters + * copied is PATH_MAX. If the input string is larger than PATH_MAX + * characters then the string is truncated. The string is NULL + * terminated. * * local variables: * char * p pointer to external string buffer @@ -138,13 +194,18 @@ char *str; register char *p; p = str; - do { - if (p < &str[FILSPC-1]) + do + { + if (p < &str[PATH_MAX-1]) *p++ = c; c = get(); - } while (c && (ctype[c] != SPACE)); - while (p < &str[FILSPC]) - *p++ = 0; + } while (c); + /* trim trailing spaces */ + --p; + while (p >= str && ctype[(int)*p] == SPACE) + --p; + /* terminate the string */ + *(++p) = '\0'; } /*)Function char getnb() @@ -447,13 +508,14 @@ loop: if (pflag && cfp && cfp->f_type == F_STD) sfp = afile(fid, "rel", 0); /* if a .cdb file exists then copy it over */ if (dflag && sfp && dfp && pass == 0) { - FILE *xfp = afile(fid,"cdb",0); + FILE *xfp = afile(fid,"adb",0); //JCF: Nov 30, 2002 if (xfp) { copyfile(dfp,xfp); fclose(xfp); } } if (uflag && pass != 0) { + SaveLinkedFilePath(fid); //Save the linked path for aomf51 if ((tfp = afile(fid, "lst", 0)) != NULL) { if ((rfp = afile(fid, "rst", 1)) == NULL) { fclose(tfp);