/*! \brief ADD \param bot \param surf surface (geosurf) \param row \param side */ void gsd_fringe_horiz_line2(float bot, geosurf * surf, int row, int side) { int col; int cnt; float pt[4]; typbuff *buff; long offset; int xcnt; GS_set_draw(GSD_FRONT); gsd_pushmatrix(); gsd_do_scale(1); gsd_translate(surf->x_trans, surf->y_trans, surf->z_trans); buff = gs_get_att_typbuff(surf, ATT_TOPO, 0); xcnt = VCOLS(surf); gsd_bgnline(); col = 0; /* floor left */ pt[X] = surf->xmin + (col * (surf->x_mod * surf->xres)); pt[Y] = surf->ymax - ((row + side) * (surf->y_mod * surf->yres)); pt[Z] = bot; gsd_vert_func(pt); offset = 0; GET_MAPATT(buff, offset, pt[Z]); pt[Z] = pt[Z] * surf->z_exag; gsd_vert_func(pt); cnt = 1; for (col = 0; col < xcnt - 1; col++) { /* bottom right */ pt[X] = surf->xmin + (col * (surf->x_mod * surf->xres)); pt[Y] = surf->ymax - ((row + side) * (surf->y_mod * surf->yres)); offset = col * surf->x_mod; GET_MAPATT(buff, offset, pt[Z]); pt[Z] = pt[Z] * surf->z_exag; gsd_vert_func(pt); cnt++; } col--; pt[X] = surf->xmin + (col * (surf->x_mod * surf->xres)); pt[Y] = surf->ymax - ((row + side) * (surf->y_mod * surf->yres)); pt[Z] = bot; gsd_vert_func(pt); gsd_endline(); GS_done_draw(); gsd_popmatrix(); gsd_flush(); return; }
/*! \brief ADD \param bot \param surf surface (geosurf) \param col \param side [unused] */ void gsd_fringe_vert_line(float bot, geosurf * surf, int col, int side) { int row; int cnt; float pt[4]; typbuff *buff; long offset; int ycnt; GS_set_draw(GSD_FRONT); gsd_pushmatrix(); gsd_do_scale(1); gsd_translate(surf->x_trans, surf->y_trans, surf->z_trans); buff = gs_get_att_typbuff(surf, ATT_TOPO, 0); ycnt = VROWS(surf); gsd_bgnline(); row = 0; /* floor left */ pt[X] = col * (surf->x_mod * surf->xres); pt[Y] = ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres)); pt[Z] = bot; gsd_vert_func(pt); offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod); GET_MAPATT(buff, offset, pt[Z]); pt[Z] = pt[Z] * surf->z_exag; gsd_vert_func(pt); cnt = 1; for (row = 0; row < ycnt - 1; row++) { /* bottom right */ pt[X] = col * (surf->x_mod * surf->xres); pt[Y] = ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres)); offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod); GET_MAPATT(buff, offset, pt[Z]); pt[Z] = pt[Z] * surf->z_exag; gsd_vert_func(pt); cnt++; } row--; pt[X] = col * (surf->x_mod * surf->xres); pt[Y] = ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres)); pt[Z] = bot; gsd_vert_func(pt); row = 0; pt[X] = col * (surf->x_mod * surf->xres); pt[Y] = ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres)); pt[Z] = bot; gsd_vert_func(pt); gsd_endline(); GS_done_draw(); gsd_popmatrix(); gsd_flush(); return; }
void write_globals( FILE *obj) { GSD gsd; SYMBOL *sym; SECTION *psect; SYMBOL_ITER sym_iter; int isect; if (obj == NULL) { for (isect = 0; isect < sector; isect++) { psect = sections[isect]; psect->sector = isect; /* Assign it a sector */ psect->pc = 0; /* Reset its PC for second pass */ } return; /* Nothing more to do if no OBJ file. */ } gsd_init(&gsd, obj); gsd_mod(&gsd, module_name); if (ident) gsd_ident(&gsd, ident); /* write out each PSECT with its global stuff */ /* Sections must be written out in the order that they appear in the assembly file. */ for (isect = 0; isect < sector; isect++) { psect = sections[isect]; gsd_psect(&gsd, psect->label, psect->flags, psect->size); psect->sector = isect; /* Assign it a sector */ psect->pc = 0; /* Reset its PC for second pass */ sym = first_sym(&symbol_st, &sym_iter); while (sym) { if ((sym->flags & SYMBOLFLAG_GLOBAL) && sym->section == psect) { gsd_global(&gsd, sym->label, (sym-> flags & SYMBOLFLAG_DEFINITION ? GLOBAL_DEF : 0) | ((sym-> flags & SYMBOLFLAG_WEAK) ? GLOBAL_WEAK : 0) | ((sym->section->flags & PSECT_REL) ? GLOBAL_REL : 0) | 0100, /* Looks undefined, but add it in anyway */ sym->value); } sym = next_sym(&symbol_st, &sym_iter); } } /* Now write out the transfer address */ if (xfer_address->type == EX_LIT) { gsd_xfer(&gsd, ". ABS.", xfer_address->data.lit); } else { SYMBOL *lsym; unsigned offset; if (!express_sym_offset(xfer_address, &lsym, &offset)) { report(NULL, "Illegal program transfer address\n"); } else { gsd_xfer(&gsd, lsym->section->label, lsym->value + offset); } } gsd_flush(&gsd); gsd_end(&gsd); }