/[gxemul]/trunk/src/diskimage.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/diskimage.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 12 by dpavlin, Mon Oct 8 16:18:38 2007 UTC revision 22 by dpavlin, Mon Oct 8 16:19:37 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2003-2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2003-2006  Anders Gavare.  All rights reserved.
3   *   *
4   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
5   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *   *
27   *   *
28   *  $Id: diskimage.c,v 1.95 2005/08/10 22:25:50 debug Exp $   *  $Id: diskimage.c,v 1.108 2006/01/11 20:14:41 debug Exp $
29   *   *
30   *  Disk image support.   *  Disk image support.
31   *   *
# Line 53  Line 53 
53  #include "misc.h"  #include "misc.h"
54    
55    
56  extern int quiet_mode;  /*  #define debug fatal  */
57    
58  extern int single_step;  extern int single_step;
59    
60  static char *diskimage_types[] = DISKIMAGE_TYPES;  static char *diskimage_types[] = DISKIMAGE_TYPES;
# Line 478  static int diskimage__internal_access(st Line 479  static int diskimage__internal_access(st
479  int diskimage_scsicommand(struct cpu *cpu, int id, int type,  int diskimage_scsicommand(struct cpu *cpu, int id, int type,
480          struct scsi_transfer *xferp)          struct scsi_transfer *xferp)
481  {  {
482          int retlen, i;          char namebuf[16];
483            int retlen, i, q;
484          uint64_t size;          uint64_t size;
485          int64_t ofs;          int64_t ofs;
486          int pagecode;          int pagecode;
# Line 588  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 590  xferp->data_in[4] = 0x2c - 4;  /*  Additi
590                  xferp->data_in[6] = 0x04;  /*  ACKREQQ  */                  xferp->data_in[6] = 0x04;  /*  ACKREQQ  */
591                  xferp->data_in[7] = 0x60;  /*  WBus32, WBus16  */                  xferp->data_in[7] = 0x60;  /*  WBus32, WBus16  */
592    
593                  /*  These must be padded with spaces:  */                  /*  These are padded with spaces:  */
594                  memcpy(xferp->data_in+8,  "FAKE    ", 8);  
595                  memcpy(xferp->data_in+16, "DISK            ", 16);                  memcpy(xferp->data_in+8,  "GXemul  ", 8);
596                  memcpy(xferp->data_in+32, "V0.0", 4);                  if (diskimage_getname(cpu->machine, id,
597                        type, namebuf, sizeof(namebuf))) {
598                            size_t i;
599                            for (i=0; i<sizeof(namebuf); i++)
600                                    if (namebuf[i] == 0) {
601                                            for (; i<sizeof(namebuf); i++)
602                                                    namebuf[i] = ' ';
603                                            break;
604                                    }
605                            memcpy(xferp->data_in+16, namebuf, 16);
606                    } else
607                            memcpy(xferp->data_in+16, "DISK            ", 16);
608                    memcpy(xferp->data_in+32, "0   ", 4);
609    
610                  /*                  /*
611                   *  Some Ultrix kernels want specific responses from                   *  Some Ultrix kernels want specific responses from
612                   *  the drives.                   *  the drives.
613                   */                   */
614    
615                  if (machine->machine_type == MACHINE_DEC) {                  if (machine->machine_type == MACHINE_PMAX) {
616                          /*  DEC, RZ25 (rev 0900) = 832527 sectors  */                          /*  DEC, RZ25 (rev 0900) = 832527 sectors  */
617                          /*  DEC, RZ58 (rev 2000) = 2698061 sectors  */                          /*  DEC, RZ58 (rev 2000) = 2698061 sectors  */
618                          memcpy(xferp->data_in+8,  "DEC     ", 8);                          memcpy(xferp->data_in+8,  "DEC     ", 8);
# Line 610  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 624  xferp->data_in[4] = 0x2c - 4;  /*  Additi
624                  if (d->is_a_cdrom) {                  if (d->is_a_cdrom) {
625                          xferp->data_in[0] = 0x05;  /*  0x05 = CD-ROM  */                          xferp->data_in[0] = 0x05;  /*  0x05 = CD-ROM  */
626                          xferp->data_in[1] = 0x80;  /*  0x80 = removable  */                          xferp->data_in[1] = 0x80;  /*  0x80 = removable  */
627                          memcpy(xferp->data_in+16, "CD-ROM          ", 16);                          /*  memcpy(xferp->data_in+16, "CD-ROM          ", 16);*/
628    
629                          if (machine->machine_type == MACHINE_DEC) {                          if (machine->machine_type == MACHINE_PMAX) {
630                                  /*  SONY, CD-ROM:  */                                  /*  SONY, CD-ROM:  */
631                                  memcpy(xferp->data_in+8, "SONY    ", 8);                                  memcpy(xferp->data_in+8, "SONY    ", 8);
632                                  memcpy(xferp->data_in+16,                                  memcpy(xferp->data_in+16,
# Line 623  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 637  xferp->data_in[4] = 0x2c - 4;  /*  Additi
637                                  memcpy(xferp->data_in+16,                                  memcpy(xferp->data_in+16,
638                                      "RRD42   (C) DEC ", 16);                                      "RRD42   (C) DEC ", 16);
639                                  memcpy(xferp->data_in+32, "4.5d", 4);                                  memcpy(xferp->data_in+32, "4.5d", 4);
640                          } else {                          } else if (machine->machine_type == MACHINE_ARC) {
641                                  /*  NEC, CD-ROM:  */                                  /*  NEC, CD-ROM:  */
642                                  memcpy(xferp->data_in+8, "NEC     ", 8);                                  memcpy(xferp->data_in+8, "NEC     ", 8);
643                                  memcpy(xferp->data_in+16,                                  memcpy(xferp->data_in+16,
# Line 638  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 652  xferp->data_in[4] = 0x2c - 4;  /*  Additi
652                          xferp->data_in[1] = 0x80;  /*  0x80 = removable  */                          xferp->data_in[1] = 0x80;  /*  0x80 = removable  */
653                          memcpy(xferp->data_in+16, "TAPE            ", 16);                          memcpy(xferp->data_in+16, "TAPE            ", 16);
654    
655                          if (machine->machine_type == MACHINE_DEC) {                          if (machine->machine_type == MACHINE_PMAX) {
656                                  /*                                  /*
657                                   *  TODO:  find out if these are correct.                                   *  TODO:  find out if these are correct.
658                                   *                                   *
# Line 693  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 707  xferp->data_in[4] = 0x2c - 4;  /*  Additi
707                  break;                  break;
708    
709          case SCSICMD_MODE_SENSE:          case SCSICMD_MODE_SENSE:
710            case SCSICMD_MODE_SENSE10:      
711                  debug("MODE_SENSE");                  debug("MODE_SENSE");
712                    q = 4; retlen = xferp->cmd[4];
713                  if (xferp->cmd_len != 6)                  switch (xferp->cmd_len) {
714                          fatal(" (unimplemented mode_sense len=%i)",                  case 6: break;
715                    case 10:q = 8;
716                            retlen = xferp->cmd[7] * 256 + xferp->cmd[8];
717                            break;
718                    default:fatal(" (unimplemented mode_sense len=%i)",
719                              xferp->cmd_len);                              xferp->cmd_len);
720                    }
                 retlen = xferp->cmd[4];  
721    
722                  /*                  /*
723                   *  NOTE/TODO: This code doesn't handle too short retlens                   *  NOTE/TODO: This code doesn't handle too short retlens
# Line 734  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 752  xferp->data_in[4] = 0x2c - 4;  /*  Additi
752                  xferp->data_in[3] = 8 * 1;      /*  block descriptor                  xferp->data_in[3] = 8 * 1;      /*  block descriptor
753                                                      length: 1 page (?)  */                                                      length: 1 page (?)  */
754    
755                  /*  TODO: update this when implementing 10-byte commands:  */                  xferp->data_in[q+0] = 0x00;     /*  density code  */
756                  xferp->data_in[4] = 0x00;       /*  density code  */                  xferp->data_in[q+1] = 0;        /*  nr of blocks, high  */
757                  xferp->data_in[5] = 0;          /*  nr of blocks, high  */                  xferp->data_in[q+2] = 0;        /*  nr of blocks, mid  */
758                  xferp->data_in[6] = 0;          /*  nr of blocks, mid  */                  xferp->data_in[q+3] = 0;        /*  nr of blocks, low */
759                  xferp->data_in[7] = 0;          /*  nr of blocks, low */                  xferp->data_in[q+4] = 0x00;     /*  reserved  */
760                  xferp->data_in[8] = 0x00;       /*  reserved  */                  xferp->data_in[q+5] = (d->logical_block_size >> 16) & 255;
761                  xferp->data_in[9] = (d->logical_block_size >> 16) & 255;                  xferp->data_in[q+6] = (d->logical_block_size >> 8) & 255;
762                  xferp->data_in[10] = (d->logical_block_size >> 8) & 255;                  xferp->data_in[q+7] = d->logical_block_size & 255;
763                  xferp->data_in[11] = d->logical_block_size & 255;                  q += 8;
764    
765                  diskimage__return_default_status_and_message(xferp);                  diskimage__return_default_status_and_message(xferp);
766    
# Line 754  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 772  xferp->data_in[4] = 0x2c - 4;  /*  Additi
772                          /*  TODO: Nothing here?  */                          /*  TODO: Nothing here?  */
773                          break;                          break;
774                  case 1:         /*  read-write error recovery page  */                  case 1:         /*  read-write error recovery page  */
775                          xferp->data_in[12 + 0] = pagecode;                          xferp->data_in[q + 0] = pagecode;
776                          xferp->data_in[12 + 1] = 10;                          xferp->data_in[q + 1] = 10;
777                          break;                          break;
778                  case 3:         /*  format device page  */                  case 3:         /*  format device page  */
779                          xferp->data_in[12 + 0] = pagecode;                          xferp->data_in[q + 0] = pagecode;
780                          xferp->data_in[12 + 1] = 22;                          xferp->data_in[q + 1] = 22;
781    
782                          /*  10,11 = sectors per track  */                          /*  10,11 = sectors per track  */
783                          xferp->data_in[12 + 10] = 0;                          xferp->data_in[q + 10] = 0;
784                          xferp->data_in[12 + 11] = d->sectors_per_track;                          xferp->data_in[q + 11] = d->sectors_per_track;
785    
786                          /*  12,13 = physical sector size  */                          /*  12,13 = physical sector size  */
787                          xferp->data_in[12 + 12] =                          xferp->data_in[q + 12] =
788                              (d->logical_block_size >> 8) & 255;                              (d->logical_block_size >> 8) & 255;
789                          xferp->data_in[12 + 13] = d->logical_block_size & 255;                          xferp->data_in[q + 13] = d->logical_block_size & 255;
790                          break;                          break;
791                  case 4:         /*  rigid disk geometry page  */                  case 4:         /*  rigid disk geometry page  */
792                          xferp->data_in[12 + 0] = pagecode;                          xferp->data_in[q + 0] = pagecode;
793                          xferp->data_in[12 + 1] = 22;                          xferp->data_in[q + 1] = 22;
794                          xferp->data_in[12 + 2] = (d->ncyls >> 16) & 255;                          xferp->data_in[q + 2] = (d->ncyls >> 16) & 255;
795                          xferp->data_in[12 + 3] = (d->ncyls >> 8) & 255;                          xferp->data_in[q + 3] = (d->ncyls >> 8) & 255;
796                          xferp->data_in[12 + 4] = d->ncyls & 255;                          xferp->data_in[q + 4] = d->ncyls & 255;
797                          xferp->data_in[12 + 5] = d->heads;                          xferp->data_in[q + 5] = d->heads;
798    
799                          xferp->data_in[12 + 20] = (d->rpms >> 8) & 255;                          xferp->data_in[q + 20] = (d->rpms >> 8) & 255;
800                          xferp->data_in[12 + 21] = d->rpms & 255;                          xferp->data_in[q + 21] = d->rpms & 255;
801                          break;                          break;
802                  case 5:         /*  flexible disk page  */                  case 5:         /*  flexible disk page  */
803                          xferp->data_in[12 + 0] = pagecode;                          xferp->data_in[q + 0] = pagecode;
804                          xferp->data_in[12 + 1] = 0x1e;                          xferp->data_in[q + 1] = 0x1e;
805    
806                          /*  2,3 = transfer rate  */                          /*  2,3 = transfer rate  */
807                          xferp->data_in[12 + 2] = ((5000) >> 8) & 255;                          xferp->data_in[q + 2] = ((5000) >> 8) & 255;
808                          xferp->data_in[12 + 3] = (5000) & 255;                          xferp->data_in[q + 3] = (5000) & 255;
809    
810                          xferp->data_in[12 + 4] = d->heads;                          xferp->data_in[q + 4] = d->heads;
811                          xferp->data_in[12 + 5] = d->sectors_per_track;                          xferp->data_in[q + 5] = d->sectors_per_track;
812    
813                          /*  6,7 = data bytes per sector  */                          /*  6,7 = data bytes per sector  */
814                          xferp->data_in[12 + 6] = (d->logical_block_size >> 8)                          xferp->data_in[q + 6] = (d->logical_block_size >> 8)
815                              & 255;                              & 255;
816                          xferp->data_in[12 + 7] = d->logical_block_size & 255;                          xferp->data_in[q + 7] = d->logical_block_size & 255;
817    
818                          xferp->data_in[12 + 8] = (d->ncyls >> 8) & 255;                          xferp->data_in[q + 8] = (d->ncyls >> 8) & 255;
819                          xferp->data_in[12 + 9] = d->ncyls & 255;                          xferp->data_in[q + 9] = d->ncyls & 255;
820    
821                          xferp->data_in[12 + 28] = (d->rpms >> 8) & 255;                          xferp->data_in[q + 28] = (d->rpms >> 8) & 255;
822                          xferp->data_in[12 + 29] = d->rpms & 255;                          xferp->data_in[q + 29] = d->rpms & 255;
823                          break;                          break;
824                  default:                  default:
825                          fatal("[ MODE_SENSE for page %i is not yet "                          fatal("[ MODE_SENSE for page %i is not yet "
# Line 879  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 897  xferp->data_in[4] = 0x2c - 4;  /*  Additi
897                                   *  blocks to transfer. (NOTE: If the value is                                   *  blocks to transfer. (NOTE: If the value is
898                                   *  0, this means 0, not 65536. :-)                                   *  0, this means 0, not 65536. :-)
899                                   */                                   */
900                                  ofs = (xferp->cmd[2] << 24) + (xferp->cmd[3]                                  ofs = ((uint64_t)xferp->cmd[2] << 24) +
901                                      << 16) + (xferp->cmd[4] << 8) +                                      (xferp->cmd[3] << 16) + (xferp->cmd[4] << 8)
902                                      xferp->cmd[5];                                      + xferp->cmd[5];
903                                  retlen = (xferp->cmd[7] << 8) + xferp->cmd[8];                                  retlen = (xferp->cmd[7] << 8) + xferp->cmd[8];
904                          }                          }
905    
# Line 957  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 975  xferp->data_in[4] = 0x2c - 4;  /*  Additi
975                           *  transfer. (NOTE: If the value is 0 this means 0,                           *  transfer. (NOTE: If the value is 0 this means 0,
976                           *  not 65536.)                           *  not 65536.)
977                           */                           */
978                          ofs = (xferp->cmd[2] << 24) + (xferp->cmd[3] << 16) +                          ofs = ((uint64_t)xferp->cmd[2] << 24) +
979                                (xferp->cmd[4] << 8) + xferp->cmd[5];                              (xferp->cmd[3] << 16) + (xferp->cmd[4] << 8) +
980                                xferp->cmd[5];
981                          retlen = (xferp->cmd[7] << 8) + xferp->cmd[8];                          retlen = (xferp->cmd[7] << 8) + xferp->cmd[8];
982                  }                  }
983    
# Line 1006  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 1025  xferp->data_in[4] = 0x2c - 4;  /*  Additi
1025                  if (xferp->cmd_len != 6)                  if (xferp->cmd_len != 6)
1026                          debug(" (weird len=%i)", xferp->cmd_len);                          debug(" (weird len=%i)", xferp->cmd_len);
1027    
1028                  for (i=0; i<xferp->cmd_len; i++)                  for (i=0; i<(ssize_t)xferp->cmd_len; i++)
1029                          debug(" %02x", xferp->cmd[i]);                          debug(" %02x", xferp->cmd[i]);
1030    
1031                  /*  TODO: actualy care about cmd[]  */                  /*  TODO: actualy care about cmd[]  */
# Line 1215  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 1234  xferp->data_in[4] = 0x2c - 4;  /*  Additi
1234                  scsi_transfer_allocbuf(&xferp->data_in_len,                  scsi_transfer_allocbuf(&xferp->data_in_len,
1235                      &xferp->data_in, retlen, 1);                      &xferp->data_in, retlen, 1);
1236    
1237                  /*  TODO  */                  xferp->data_in[0] = 0;
1238                    xferp->data_in[1] = 10;
1239                    xferp->data_in[2] = 0;          /*  First track.  */
1240                    xferp->data_in[3] = 0;          /*  Last track.  */
1241    
1242                    /*  Track 0 data:  */
1243                    xferp->data_in[4] = 0x00;       /*  Reserved.  */
1244                    xferp->data_in[5] = 0x04;       /*  ADR + CTRL:
1245                                                        Data, not audio  */
1246                    xferp->data_in[6] = 0x00;       /*  Track nr  */
1247                    xferp->data_in[7] = 0x00;       /*  Reserved  */
1248                    /*  8..11 = absolute CDROM address  */
1249    
1250                  diskimage__return_default_status_and_message(xferp);                  diskimage__return_default_status_and_message(xferp);
1251                  break;                  break;
# Line 1256  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 1286  xferp->data_in[4] = 0x2c - 4;  /*  Additi
1286                  } else {                  } else {
1287                          int i;                          int i;
1288                          fatal("[ unknown MODE_SELECT: cmd =");                          fatal("[ unknown MODE_SELECT: cmd =");
1289                          for (i=0; i<xferp->cmd_len; i++)                          for (i=0; i<(ssize_t)xferp->cmd_len; i++)
1290                                  fatal(" %02x", xferp->cmd[i]);                                  fatal(" %02x", xferp->cmd[i]);
1291                          fatal(", data_out =");                          fatal(", data_out =");
1292                          for (i=0; i<xferp->data_out_len; i++)                          for (i=0; i<(ssize_t)xferp->data_out_len; i++)
1293                                  fatal(" %02x", xferp->data_out[i]);                                  fatal(" %02x", xferp->data_out[i]);
1294                          fatal(" ]");                          fatal(" ]");
1295                  }                  }
# Line 1268  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 1298  xferp->data_in[4] = 0x2c - 4;  /*  Additi
1298                  diskimage__return_default_status_and_message(xferp);                  diskimage__return_default_status_and_message(xferp);
1299                  break;                  break;
1300    
1301          case 0x1e:          case SCSICMD_PREVENT_ALLOW_REMOVE:
1302                  debug("[ SCSI 0x%02x: TODO ]\n", xferp->cmd[0]);                  debug("[ SCSI 0x%02x Prevent/allow medium removal: "
1303                        "TODO ]\n", xferp->cmd[0]);
                 /*  TODO  */  
1304    
1305                  diskimage__return_default_status_and_message(xferp);                  diskimage__return_default_status_and_message(xferp);
1306                  break;                  break;
# Line 1279  xferp->data_in[4] = 0x2c - 4;  /*  Additi Line 1308  xferp->data_in[4] = 0x2c - 4;  /*  Additi
1308          case 0xbd:          case 0xbd:
1309                  fatal("[ SCSI 0x%02x (len %i), TODO: ", xferp->cmd[0],                  fatal("[ SCSI 0x%02x (len %i), TODO: ", xferp->cmd[0],
1310                      xferp->cmd_len);                      xferp->cmd_len);
1311                  for (i=0; i<xferp->cmd_len; i++)                  for (i=0; i<(ssize_t)xferp->cmd_len; i++)
1312                          fatal(" %02x", xferp->cmd[i]);                          fatal(" %02x", xferp->cmd[i]);
1313                  fatal(" ]\n");                  fatal(" ]\n");
1314    
# Line 1470  int diskimage_add(struct machine *machin Line 1499  int diskimage_add(struct machine *machin
1499                  d2->next = d;                  d2->next = d;
1500          }          }
1501    
1502          d->type = DISKIMAGE_SCSI;          d->type = DISKIMAGE_IDE;
1503    
1504          /*  Special cases: some machines usually have FLOPPY/IDE, not SCSI:  */          if (machine->machine_type == MACHINE_PMAX ||
1505          if (machine->arch == ARCH_X86 ||              machine->machine_type == MACHINE_ARC)
1506              machine->machine_type == MACHINE_COBALT ||                  d->type = DISKIMAGE_SCSI;
             machine->machine_type == MACHINE_EVBMIPS ||  
             machine->machine_type == MACHINE_HPCMIPS ||  
             machine->machine_type == MACHINE_PS2)  
                 d->type = DISKIMAGE_IDE;  
1507    
1508          if (prefix_i + prefix_f + prefix_s > 1) {          if (prefix_i + prefix_f + prefix_s > 1) {
1509                  fprintf(stderr, "Invalid disk image prefix(es). You can"                  fprintf(stderr, "Invalid disk image prefix(es). You can"
# Line 1505  int diskimage_add(struct machine *machin Line 1530  int diskimage_add(struct machine *machin
1530           *  Is this a tape, CD-ROM or a normal disk?           *  Is this a tape, CD-ROM or a normal disk?
1531           *           *
1532           *  An intelligent guess, if no prefixes are used, would be that           *  An intelligent guess, if no prefixes are used, would be that
1533           *  filenames ending with .iso are CD-ROM images.           *  filenames ending with .iso or .cdr are CD-ROM images.
1534           */           */
1535          if (prefix_t) {          if (prefix_t) {
1536                  d->is_a_tape = 1;                  d->is_a_tape = 1;
1537          } else {          } else {
1538                  if (prefix_c ||                  if (prefix_c ||
1539                      ((strlen(d->fname) > 4 &&                      ((strlen(d->fname) > 4 &&
1540                      strcasecmp(d->fname + strlen(d->fname) - 4, ".iso") == 0)                      (strcasecmp(d->fname + strlen(d->fname) - 4, ".cdr") == 0 ||
1541                        strcasecmp(d->fname + strlen(d->fname) - 4, ".iso") == 0))
1542                      && !prefix_d)                      && !prefix_d)
1543                     ) {                     ) {
1544                          d->is_a_cdrom = 1;                          d->is_a_cdrom = 1;
# Line 1530  int diskimage_add(struct machine *machin Line 1556  int diskimage_add(struct machine *machin
1556                           */                           */
1557    
1558  #if 0  #if 0
1559                          if (machine->machine_type == MACHINE_DEC)                          if (machine->machine_type == MACHINE_PMAX)
1560                                  d->logical_block_size = 512;                                  d->logical_block_size = 512;
1561                          else                          else
1562                                  d->logical_block_size = 2048;                                  d->logical_block_size = 2048;
# Line 1670  int diskimage_bootdev(struct machine *ma Line 1696  int diskimage_bootdev(struct machine *ma
1696    
1697    
1698  /*  /*
1699     *  diskimage_getname():
1700     *
1701     *  Returns 1 if a valid disk image name was returned, 0 otherwise.
1702     */
1703    int diskimage_getname(struct machine *machine, int id, int type,
1704            char *buf, size_t bufsize)
1705    {
1706            struct diskimage *d = machine->first_diskimage;
1707    
1708            if (buf == NULL)
1709                    return 0;
1710    
1711            while (d != NULL) {
1712                    if (d->type == type && d->id == id) {
1713                            char *p = strrchr(d->fname, '/');
1714                            if (p == NULL)
1715                                    p = d->fname;
1716                            else
1717                                    p ++;
1718                            snprintf(buf, bufsize, "%s", p);
1719                            return 1;
1720                    }
1721                    d = d->next;
1722            }
1723            return 0;
1724    }
1725    
1726    
1727    /*
1728   *  diskimage_is_a_cdrom():   *  diskimage_is_a_cdrom():
1729   *   *
1730   *  Returns 1 if a disk image is a CDROM, 0 otherwise.   *  Returns 1 if a disk image is a CDROM, 0 otherwise.
# Line 1715  int diskimage_is_a_tape(struct machine * Line 1770  int diskimage_is_a_tape(struct machine *
1770   */   */
1771  void diskimage_dump_info(struct machine *machine)  void diskimage_dump_info(struct machine *machine)
1772  {  {
1773          int iadd=4;          int iadd = DEBUG_INDENTATION;
1774          struct diskimage *d = machine->first_diskimage;          struct diskimage *d = machine->first_diskimage;
1775    
1776          while (d != NULL) {          while (d != NULL) {

Legend:
Removed from v.12  
changed lines
  Added in v.22

  ViewVC Help
Powered by ViewVC 1.1.26