DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T s

⟦3c144927f⟧ TextFile

    Length: 1490 (0x5d2)
    Types: TextFile
    Names: »schloader.c«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/gnu-31mar87/scheme/schloader.c« 

TextFile

#include <stdio.h>

#define SCHEME_VERSION "/u1/scheme/scheme_version"
#define OPEN_FOR_READING "r"
#define STRING_SIZE 255

#define output_string(string)	\
{ putc(' ', stdout);		\
  fputs(string, stdout);	\
}

int get_string(dest, max, file)
char *dest;
int max;
FILE *file;
{ char *sfree, c;
  int limit = max-1;
  int i = 0;
  sfree = dest;
  while((i < limit) && ((c = getc(file)) != EOF) && (c != '\n'))
  { *sfree++ = c;
    i+=1;
  }
  while ((c != EOF) && (c != '\n')) c = getc(file);
  *sfree = '\0';
  return i;
}

main(argc, argv, envp)
int argc;
char *argv[], *envp[];
{ char microcode_name[STRING_SIZE], band_name[STRING_SIZE];
  int i;
  FILE *fopen(), *fp;

  /* Find the name of the Scheme microcode */

  fp = fopen(SCHEME_VERSION, OPEN_FOR_READING);
  if (fp == NULL)
  { printf("Can not find the Scheme description file in %s\n", SCHEME_VERSION);
    exit(1);
  }
  get_string(microcode_name, STRING_SIZE, fp);
  get_string(band_name, STRING_SIZE, fp);
  fclose(fp);

  /* Print the command line and invoke Scheme */

  fputs(microcode_name, stdout);
  if (argc <= 1)
  { output_string(band_name);
    putc('\n', stdout);
    execle(microcode_name, microcode_name, band_name, 0, &envp[0]);
  }
  else
  { for(i = 1; i < argc; i++) output_string(argv[i]);
    putc('\n', stdout);
    execvp(microcode_name, &argv[0], &envp[0]);
  }

  /* We can only ge here if the exec call fails! */

  printf("Can not invoke the Scheme microcode in %s\n", microcode_name);
  exit(1);
}