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 - metrics - download
Index: T c

⟦4f21dae7e⟧ TextFile

    Length: 7732 (0x1e34)
    Types: TextFile
    Names: »ckdpct.c«

Derivation

└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
    └─⟦3da672b63⟧ »EurOpenD3/misc/kermit.tar.Z« 
        └─⟦126dd3ca0⟧ 
            └─⟦this⟧ »ckdpct.c« 

TextFile

/* The boo and de-boo programs do not work, and I found them too cumbersome
 * and complicated to install on the DG.  In their place, I have provided
 * a few other tools:
 *
 *      uuencode and uudecode:  
 *          Convert any binary file to a non-binary file, and preserve the
 *          DG record and file types, if done on DG systems.
 *      sq and usq:
 *          CP/M (and others) squeeze and unsqueeze programs.  Should be
 *          compatible with Unix and other hosts.
 *      compress:
 *          a more efficient compression than sq/usq.  Also compatible with
 *          many hosts.
 *
 * If anyone can get these other files working, more power to you.  The
 * uudecode program is slow, but the squeeze programs are very fast.  The
 * uudecode could be faster, but I did not want to wasted alot of time on
 * it.  Anyway, the uudecode source is very simple, and should be easy to
 * convert to another language.  If you do convert the uudecode program,
 * please let me know, so that it can be distributed to hosts that do not
 * have the C compiler.
 *
 *   Phil Julian, SAS Institute, Inc., Box 8000, Cary, NC 27512-8000
 *
 */

/*
 * MSBPCT.C
 *
 * Howie Kaye -- Columbia University 3/11/86
 *
 * sibling program to MSBMKB.C.  It is used to unpack BOO files, used for
 * encoding binary files into text, and back.  This program does the decoding.
 * It is meant to replace the program "MSBPCT.BAS", and runs approximately
 * 200 times faster.
 *
 * For documentation on BOO file format, see MSBMKB.C
 * This program runs, as is, under Microsoft C on MSDOS, and under UNIX(4.2).
 *
 * Modification history:
 *
 * 3/23/86 - Davide P. Cervone -- University of Rochester
 *   added AMIGA and VAX11C support
 *
 * 3/24/86 - Martin Knoblauch -- TH-Darmstadt              (MK001)
 *   test if 1. line of inputfile is delimited by "\r\n" instead of "\n"
 *
 * 5/5/86 - John Matthews, U of Delaware.
 *   Explicitly close the files.
 *
 * 5/8/86 - L. John Junod, DTNSRDC.
 *   Adapt for Computer Innovations MS-DOS CI-86 Compiler
 *   Improve too many args error message
 */
 
/***
#define MSDOS
#define CI86
***/
 
#include <stdio.h>
 
#ifdef AMIGA
#include <fcntl.h>
#else
#endif
 
#ifdef MSDOS 
#ifndef CI86
#include <fcntl.h>
#endif
#else
#ifdef vax11c
#include <file.h>
#else
#ifdef datageneral
#include <fcntl.h>
#include <sys_calls.h>
#include <packets/filestatus.h>         /* Used for ?GNFN */
#include <packets:normal_io.h>
#include <paru.h>
struct p_nio_ex w_io_parms;             /* ?write system call structure */
P_FSTAT buf; 
int ac0,ac2;
char name[256];
#define R_ACC 4
#ifdef putc
#undef putc
#endif
#define putc(c,file) { char ch = (char) (c); dg_binw(fchannel(file),&ch,1); }
#define write(filen,chs,len) dg_binw(filen,chs,len)
#else
#include <sys/file.h>
#endif
#endif
#endif
 
#define fixchr(x) ((x) -'0')
#define NULLCHR fixchr('#')
 
yes_or_no_p(arg) char *arg; {
  int c,x;
  while (1) {
    printf("%s",arg);
    c = getchar();
    if (c == '\n') continue;
    while ((x = getchar()) != '\n')
      if (x == EOF) return(0);
    if ((c == 'Y') || (c == 'y')) return(1);
    if ((c == 'N') || (c == 'n') || (c == EOF)) return(0);
    printf("Please answer 'Y' or 'N'\n");
  }
}
 
main(argc,argv) char **argv; {
#ifdef AMIGA
  char *infile = "CKIKER.BOO";          /* input file name, with default */
#else
#ifdef datageneral
  char *infile = "CKDKER.BOO";          /* input file name, with default */
#else
  char *infile = "MSKERMIT.BOO";        /* input file name, with default */
#endif
#endif
  char outfile[100];                    /* output file name */
  FILE *ifp, *ofp;                      /* i/o files */
  char inline[100],outline[200];
  int f;
 
  if (argc > 2) {                       /* check for too many args */
    printf("Too many args. Usage: msbpct [inputfile]\n");
    exit(1);
  }
  if (argc > 1) {                       /* check for input file */
    infile = argv[1];
  }
#ifdef datageneral
  /* Initialize the i/o block for putc() */
  zero((char *) &w_io_parms, sizeof(w_io_parms));
  w_io_parms.isti = $IBIN|$RTDY|$ICRF|$OFOT;
  w_io_parms.isti &= ~$IPST;
  w_io_parms.imrs = 2048;
  w_io_parms.ibad = -1;
  w_io_parms.ircl = -1;

  if ((ifp = dg_open(infile,$OFIN|$RTDS|$ICRF,$FUDF)) == NULL) {
#else
  if ((ifp = fopen(infile,"r")) == NULL) { /* open input file */
#endif
    printf("%s not found.\n",infile);   /* failure? */
    exit(1);
  }
 
  fgets(outfile,100,ifp);               /* get output file name */
  if ((outfile[strlen(outfile)-2] == '\r')|    /* MK001 */
      (outfile[strlen(outfile)-2] == '\n')) {
    outfile[strlen(outfile)-2] = '\0';
  }
  else {
    outfile[strlen(outfile)-1] = '\0';
  }
 
  if ((ofp = fopen(outfile,"r")) != NULL) {
    char msg[100];
    sprintf(msg,"output file '%s' already exists.  continue (y/n)? ",outfile);
    if (!yes_or_no_p(msg)) {
      printf("ok.  bye\n");
      exit(0);
    }
    else {
      fclose(ofp);
    }
  }
 
#ifndef MSDOS
#ifndef O_BINARY
#define O_BINARY 0
#endif
#endif
 
#ifdef AMIGA
  if ((ofp = fopen(outfile,"w")) == NULL) {
    printf("could not open %s\n",outfile); /* failure */
    exit(0);
  }
#else
#ifdef CI86
   if((ofp = fopen(outfile,"wb")) == NULL){
    printf("could not open %s\n",outfile); /* failure */
    exit(0);
   }
#else
#ifdef datageneral
   if ((ofp = dg_open(outfile,$OFOT|$IBIN|$OFCR|$OFCE|$RTUN,$FUNX)) == NULL) {
   /* if((ofp = fopen(outfile,"k")) == NULL){ */
    perror("Open outfile");
    printf("Could not open %s\n",outfile); /* failure */
    exit(0);
   }
#else
  f = open(outfile,O_CREAT|O_WRONLY|O_TRUNC|O_BINARY,0x1ff);
  if ((ofp = fdopen(f,"w")) == NULL) { /* open it */
    printf("could not open %s\n",outfile); /* failure? */
    exit(1);
  }
#endif
#endif
#endif
  printf("%s ==> %s\n",infile,outfile); /* announce our intentions */
 
  while(fgets(inline,100,ifp) != NULL) { /* till EOF */
    int index=0,outindex=0;
    while (index < strlen(inline) && inline[index] != '\n' &&
           inline[index] != '\r')       /* end of line? */
      if (fixchr(inline[index]) == NULLCHR) {   /* null compress char... */
        int rptcnt;
        int i;
 
        index++;
        rptcnt = fixchr(inline[index]); /* get repeat count */
        for (i=0; i<rptcnt; i++)        /* output the nulls */
          putc('\0',ofp);
        index++;                        /* pass the count field */
      }
      else {                            /* a quad to decode... */
        int a, b, c ,d;
 
        a = fixchr(inline[index]);
        index++;
        b = fixchr(inline[index]);
        index++;
        c = fixchr(inline[index]);
        index++;
        d = fixchr(inline[index]);
        index++;
 
                                        /* output the bytes */
        putc(((a*4)+(b/16)) & 255,ofp);
        putc(((b*16)+(c/4)) & 255,ofp);
        putc(((c*64)+d) & 255,ofp);
      }
    }
#ifdef AMIGA
    putc('\032',ofp);                   /* final ^Z for micros*/
#endif
#ifdef MSDOS
    putc('\032',ofp);                   /* final ^Z */
#endif
 
    fclose(ofp);			/* Close the files */
    fclose(ifp);
}					/* End of program */


#ifdef datageneral
/* D G _ B I N W -- Output len characters to the file number filenum 
 * 
 *  The syntax is like the Unix write command.
 *  This code was borrowed from my Kermit source -- ckdtio.c
 */

dg_binw(channel,chs,len) int channel, len; char *chs; 
{
     int ac2,err;

     if (len == 0) return(0);

     w_io_parms.ich = channel;
     w_io_parms.ibad = chs;
     w_io_parms.ircl = len;
     ac2 = &w_io_parms;
     
     if ((err = sys_write(ac2)) == 0) return(0);

     if ( err != ERLTL && err != EREOF ) {
    	  perror("dg_binw: sys_write ");
          exit(err);
     }
}
#endif