-void out(int *byte_list, int num)
-{
- int i, first=1;
-
- if (num > 0) fprintf(list_fp, "%06X: ", MEM_POS);
- else fprintf(list_fp, "\t");
-
- for (i=0; i<num; i++) {
- hexout(byte_list[i], MEM_POS + i, 0);
- if (!first && (i % 4) == 0) fprintf(list_fp, "\t");
- fprintf(list_fp, "%02X", byte_list[i]);
- if ((i+1) % 4 == 0) {
- if (first) fprintf(list_fp, "\t%s\n", last_line_text);
- else fprintf(list_fp, "\n");
- first = 0;
- } else {
- if (i<num-1) fprintf(list_fp, " ");
- }
+static short last_area=-1;
+
+int debug=0;
+
+void out(int *byte_list, int num) {
+ struct symbol *p;
+ int i, first=1;
+
+ if (num > 0) fprintf(list_fp, "%06X: ", MEM_POS);
+ else fprintf(list_fp, "\t");
+
+ if (last_area!=current_area) {
+ // emit area information
+ if (area[current_area].size) {
+ fprintf (frel, "A %s size %d flags 0\n",
+ areaToString(current_area),
+ area[current_area].size);
+ if (!area[current_area].defsEmitted) {
+ for (p=sym_list; p; p=p->next) {
+ if (p->global && p->isdef && p->area==current_area) {
+ // skip temp labels
+ if (p->name[strlen(p->name)-1]!='$') {
+ if (p->mode=='=') {
+ fprintf (frel, "S %s Abs%04x\n", p->name, p->value);
+ } else {
+ fprintf (frel, "S %s Def%04x\n", p->name, p->value);
+ }
+ }
+ }
+ }
+ area[current_area].defsEmitted=1;
+ }
+ }
+ last_area=current_area;
+ }
+ if (current_area==AREA_CSEG ||
+ current_area==AREA_GSINIT ||
+ current_area==AREA_XINIT) {
+ if (num) {
+ for (i=0; i<num; i++) {
+ if ((i%16)==0) {
+ fprintf (frel, "%sT %04x", i ? "\n" : "", MEM_POS+i);