#include <stdio.h>
#include <bios.h>

int outputString(unsigned char *buf, int len, int show) {
  int count = 0;

  while(count < len) {
    if(show) putchar(buf[count]);
    count += 2;
  }
  if(show) putchar('\n');

  return count + 4;
}

int main() {
  unsigned char buffer[1024];
  int result, i;

  result = biosdisk(2, 0x80, 0, 0, 6, 1, &buffer);
  if(result != 0) {
    printf("Failed reading disk\n");
    return 1;
  }
  if(buffer[0] != 'Z' || buffer[1] != 'I' ||
    buffer[2] != 'S' || buffer[3] != 'D') {
    printf("Invalid or non-existent ZISD\n");
    return 1;
  }

  i = buffer[0x30]; /* read pointer to ZISD text area */
  i += outputString(buffer + i + 4, buffer[i], 0); /* Workstation object */
  i += outputString(buffer + i + 4, buffer[i], 0); /* Tree */
  i += outputString(buffer + i + 4, buffer[i], 1); /* Computer name */
  i += outputString(buffer + i + 4, buffer[i], 0); /* Workgroup */
  i += outputString(buffer + i + 4, buffer[i], 0); /* Last restored image */

  return 0;
}

