* src/SDCCast.c (decorateType): fix for RFE 1475742, optimize 'ifx (op == 0)' resp...
[fw/sdcc] / link / z80 / lkrloc.c
index d5873e05a3593b43f76d971da60af2dc4e6a461d..e5bdd05a54728235ec9974d9a7f55f3ec9a8ba1b 100644 (file)
@@ -15,7 +15,9 @@
 
 #include <stdio.h>
 #include <string.h>
-#include <alloc.h>
+#include <stdlib.h>
+//#include <alloc.h>
+#include <ctype.h>
 #include "aslink.h"
 
 /*)Module      lkrloc.c
  *     perform the relocation calculations.
  *
  *     lkrloc.c contains the following functions:
- *             addr_t  adb_b()
- *             addr_t  adb_lo()
- *             addr_t  adb_hi()
- *             addr_t  adw_w()
- *             addr_t  adw_lo()
- *             addr_t  adw_hi()
+ *             Addr_T  adb_b()
+ *             Addr_T  adb_lo()
+ *             Addr_T  adb_hi()
+ *             Addr_T  adw_w()
+ *             Addr_T  adw_lo()
+ *             Addr_T  adw_hi()
  *             VOID    erpdmp()
  *             VOID    errdmp()
- *             addr_t  evword()
+ *             Addr_T  evword()
  *             VOID    prntval()
  *             VOID    rele()
  *             VOID    relerr()
@@ -207,14 +209,14 @@ relt()
  *             int     lkerr           error flag
  *             int     mode            relocation mode
  *             adrr_t  paga            paging base area address
- *             addr_t  pags            paging symbol address
- *             addr_t  pc              relocated base address
- *             addr_t  r               PCR relocation value
- *             addr_t  reli            relocation initial value
- *             addr_t  relv            relocation final value
+ *             Addr_T  pags            paging symbol address
+ *             Addr_T  pc              relocated base address
+ *             Addr_T  r               PCR relocation value
+ *             Addr_T  reli            relocation initial value
+ *             Addr_T  relv            relocation final value
  *             int     rindex          symbol / area index
- *             addr_t  rtbase          base code address
- *             addr_t  rtofst          rtval[] index offset
+ *             Addr_T  rtbase          base code address
+ *             Addr_T  rtofst          rtval[] index offset
  *             int     rtp             index into T data
  *             sym     **s             pointer to array of symbol pointers
  *
@@ -224,11 +226,11 @@ relt()
  *             FILE    *stderr         standard error device
  *
  *     called functions:
- *             addr_t  adb_b()         lkrloc.c
- *             addr_t  adb_lo()        lkrloc.c
- *             addr_t  adb_hi()        lkrloc.c
- *             addr_t  adw_w()         lkrloc.c
- *             addr_t  evword()        lkrloc.c
+ *             Addr_T  adb_b()         lkrloc.c
+ *             Addr_T  adb_lo()        lkrloc.c
+ *             Addr_T  adb_hi()        lkrloc.c
+ *             Addr_T  adw_w()         lkrloc.c
+ *             Addr_T  evword()        lkrloc.c
  *             int     eval()          lkeval.c
  *             int     fprintf()       c_library
  *             VOID    ihx()           lkihx.c
@@ -248,10 +250,10 @@ relt()
 VOID
 relr()
 {
-       register mode;
-       register addr_t reli, relv;
+       register int mode;
+       register Addr_T reli, relv;
        int aindex, rindex, rtp, error;
-       addr_t r, rtbase, rtofst, paga, pags, pc;
+       Addr_T r, rtbase, rtofst, paga = 0, pags = 0, pc;
        struct areax **a;
        struct sym **s;
 
@@ -293,7 +295,7 @@ relr()
 #ifdef GAMEBOY
        {
                char *s = strrchr(a[aindex]->a_bap->a_id, '_');
-               if(s != NULL && isdigit(s[1]))
+               if(s != NULL && isdigit((unsigned char)s[1]))
                        current_rom_bank = atoi(s+1);
                else
                        current_rom_bank = 0;
@@ -397,7 +399,7 @@ relr()
                 */
                if (mode & R_PCR && mode & R_BYTE) {
                        r = relv & ~0x7F;
-                       if (r != (addr_t) ~0x7F && r != 0)
+                       if (r != (Addr_T) ~0x7F && r != 0)
                                error = 2;
                }
 
@@ -478,7 +480,7 @@ char *errmsg[] = {
  *             areax   **a             pointer to array of area pointers
  *             int     aindex          area index
  *             int     mode            relocation mode
- *             addr_t  relv            relocation value
+ *             Addr_T  relv            relocation value
  *             int     rindex          symbol / area index
  *             int     rtp             index into T data
  *             sym     **s             pointer to array of symbol pointers
@@ -490,8 +492,8 @@ char *errmsg[] = {
  *             FILE    *stderr         standard error device
  *
  *     called functions:
- *             addr_t  adw_w()         lkrloc.c
- *             addr_t  evword()        lkrloc.c
+ *             Addr_T  adw_w()         lkrloc.c
+ *             Addr_T  evword()        lkrloc.c
  *             int     eval()          lkeval.c
  *             int     fprintf()       c_library
  *             int     more()          lklex.c
@@ -507,9 +509,9 @@ char *errmsg[] = {
 VOID
 relp()
 {
-       register aindex, rindex;
+       register int aindex, rindex;
        int mode, rtp;
-       addr_t relv;
+       Addr_T relv;
        struct areax **a;
        struct sym **s;
 
@@ -628,13 +630,13 @@ rele()
        }
 }
 
-/*)Function    addr_t  evword()
+/*)Function    Addr_T  evword()
  *
  *     The function evword() combines two byte values
  *     into a single word value.
  *
  *     local variable:
- *             addr_t  v               temporary evaluation variable
+ *             Addr_T  v               temporary evaluation variable
  *
  *     global variables:
  *             hilo                    byte ordering parameter
@@ -648,10 +650,10 @@ rele()
  *
  */
 
-addr_t
+Addr_T
 evword()
 {
-       register addr_t v;
+       register Addr_T v;
 
        if (hilo) {
                v =  (eval() << 8);
@@ -663,7 +665,7 @@ evword()
        return(v);
 }
 
-/*)Function    addr_t  adb_b(v, i)
+/*)Function    Addr_T  adb_b(v, i)
  *
  *             int     v               value to add to byte
  *             int     i               rtval[] index
@@ -686,15 +688,15 @@ evword()
  *
  */
 
-addr_t
+Addr_T
 adb_b(v, i)
-register addr_t v;
+register Addr_T v;
 register int i;
 {
        return(rtval[i] += v);
 }
 
-/*)Function    addr_t  adb_lo(v, i)
+/*)Function    Addr_T  adb_lo(v, i)
  *
  *             int     v               value to add to byte
  *             int     i               rtval[] index
@@ -705,7 +707,7 @@ register int i;
  *     The MSB rtflg[] is cleared.
  *
  *     local variable:
- *             addr_t  j               temporary evaluation variable
+ *             Addr_T  j               temporary evaluation variable
  *
  *     global variables:
  *             hilo                    byte ordering parameter
@@ -721,12 +723,12 @@ register int i;
  *
  */
 
-addr_t
+Addr_T
 adb_lo(v, i)
-addr_t v;
+Addr_T v;
 int    i;
 {
-       register addr_t j;
+       register Addr_T j;
 
        j = adw_w(v, i);
        /*
@@ -740,7 +742,7 @@ int i;
        return (j);
 }
 
-/*)Function    addr_t  adb_hi(v, i)
+/*)Function    Addr_T  adb_hi(v, i)
  *
  *             int     v               value to add to byte
  *             int     i               rtval[] index
@@ -751,7 +753,7 @@ int i;
  *     The LSB rtflg[] is cleared.
  *
  *     local variable:
- *             addr_t  j               temporary evaluation variable
+ *             Addr_T  j               temporary evaluation variable
  *
  *     global variables:
  *             hilo                    byte ordering parameter
@@ -767,12 +769,12 @@ int       i;
  *
  */
 
-addr_t
+Addr_T
 adb_hi(v, i)
-addr_t v;
+Addr_T v;
 int    i;
 {
-       register addr_t j;
+       register Addr_T j;
 
        j = adw_w(v, i);
        /*
@@ -786,7 +788,7 @@ int i;
        return (j);
 }
 
-/*)Function    addr_t  adw_w(v, i)
+/*)Function    Addr_T  adw_w(v, i)
  *
  *             int     v               value to add to word
  *             int     i               rtval[] index
@@ -796,7 +798,7 @@ int i;
  *     The new value of rtval[i] / rtval[i+1] is returned.
  *
  *     local variable:
- *             addr_t  j               temporary evaluation variable
+ *             Addr_T  j               temporary evaluation variable
  *
  *     global variables:
  *             hilo                    byte ordering parameter
@@ -809,12 +811,12 @@ int       i;
  *
  */
 
-addr_t
+Addr_T
 adw_w(v, i)
-register addr_t v;
+register Addr_T v;
 register int i;
 {
-       register addr_t j;
+       register Addr_T j;
 
        if (hilo) {
                j = v + (rtval[i] << 8) + (rtval[i+1] & 0xff);
@@ -828,7 +830,7 @@ register int i;
        return(j);
 }
 
-/*)Function    addr_t  adw_lo(v, i)
+/*)Function    Addr_T  adw_lo(v, i)
  *
  *             int     v               value to add to byte
  *             int     i               rtval[] index
@@ -839,7 +841,7 @@ register int i;
  *     The MSB rtval[] is zeroed.
  *
  *     local variable:
- *             addr_t  j               temporary evaluation variable
+ *             Addr_T  j               temporary evaluation variable
  *
  *     global variables:
  *             hilo                    byte ordering parameter
@@ -854,12 +856,12 @@ register int i;
  *
  */
 
-addr_t
+Addr_T
 adw_lo(v, i)
-addr_t v;
+Addr_T v;
 int    i;
 {
-       register addr_t j;
+       register Addr_T j;
 
        j = adw_w(v, i);
        /*
@@ -873,7 +875,7 @@ int i;
        return (j);
 }
 
-/*)Function    addr_t  adw_hi(v, i)
+/*)Function    Addr_T  adw_hi(v, i)
  *
  *             int     v               value to add to byte
  *             int     i               rtval[] index
@@ -885,7 +887,7 @@ int i;
  *     The MSB rtval[] is zeroed.
  *
  *     local variable:
- *             addr_t  j               temporary evaluation variable
+ *             Addr_T  j               temporary evaluation variable
  *
  *     global variables:
  *             hilo                    byte ordering parameter
@@ -900,12 +902,12 @@ int       i;
  *
  */
 
-addr_t
+Addr_T
 adw_hi(v, i)
-addr_t v;
+Addr_T v;
 int    i;
 {
-       register addr_t j;
+       register Addr_T j;
 
        j = adw_w(v, i);
        /*
@@ -1050,7 +1052,7 @@ char *str;
 /*)Function    VOID    prntval(fptr, v)
  *
  *             FILE    *fptr           output file handle
- *             addr_t  v               value to output
+ *             Addr_T  v               value to output
  *
  *     The function prntval() outputs the value v, in the
  *     currently selected radix, to the device specified
@@ -1073,7 +1075,7 @@ char *str;
 VOID
 prntval(fptr, v)
 FILE *fptr;
-addr_t v;
+Addr_T v;
 {
        if (xflag == 0) {
                fprintf(fptr, "%04X\n", v);