🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sources.apple2
1 messages
1 total messages Started by Jonathan A. Chandross Wed, 01 May 1991 21:10
v001SRC029: BinSCII for Unix
#28
Author: Jonathan A. Chandross
Date: Wed, 01 May 1991 21:10
801 lines
32506 bytes
Submitted-by: Neil Parker (parker@corona.uoregon.edu)
Posting-number: Volume 1, Source:29
Archive-name: archive/unix/binscii/bsc
Architecture: UNIX
Version-number: 1.00

bsc is a program which creates BinSCII files on UNIX systems.

Enjoy.

=Read.Me
-
-Bsc
-Version 1.00
-
-Bsc is a program which creates BinSCII files on UNIX systems.
-
-
-COMPILING
----------
-
-To compile:
-
-        cc -o bsc bsc.c
-
-Bsc was written and tested on a BSD-based UNIX system.  If you have a
-System V-based UNIX, you might try compiling with the command
-
-        cc -DSYSTEMV -o bsc bsc.c
-
-However, I don't really know whether or not this will work, since I
-don't have access to a true System V UNIX system.  You may be on your
-own here.
-
-After you compile bsc, feel free to rename it to whatever you want--it's
-smart enough to figure out its own name.
-
-EXECUTING
----------
-
-To run bsc, use:
-
-     bsc [<options>] <filename>
-
-The following options are available:
-
-     -t type            Sets the ProDOS filetype stored in the BinSCII
-                        header to "type".  The type may be specified in
-                        any of several ways:
-                               Type             Meaning
-                               ----             -----------
-                                LLL             3-letter abbreviation
-                                dd              decimal
-                                0xdd            hexadecimal
-                                $dd             hexadecimal
-                                0dd             octal
-                        Note that a 3-letter abbreviation must be specified
-                        in lowercase, and that if you use a hex number in
-                        $dd format you will have to quote or escape the $
-                        to protect it from the shell.  If no "-t" option is
-                        present, the filetype will default to 6 (BIN).  (See
-                        the file "pftypes.h" for a complete list of recognized
-                        3-letter ProDOS filetype abbreviations.)
-
-     -a auxtype         Sets the stored ProDOS auxiliary filetype to
-                        "auxtype".  The auxiliary type may specified in
-                        any of the following forms:
-                               Syntax           Base
-                               ------           -----------
-                                dd              decimal
-                                $dd             hexadecimal
-                                0xdd            hexadecimal
-                                0dd             octal
-                        If no "-a" options is present, the auxiliary
-                        filetype will default to 0.
-
-     -m mode            Sets the stored ProDOS access mode to "mode"  The
-                        mode may be one or more of the following:
-                              Mode              Meaning
-                              ----              ---------
-                                d               destroy
-                                n               rename
-                                b               backup-needed
-                                i               invisible
-                                w               write
-                                r               read
-                        If no "-m" option is present, the access mode
-                        defaults to "dnwr", which corresponds to an
-                        "unlocked" ProDOS file.  To create a "locked"
-                        file, use "-m r".
-
-     -s num             Sets the number of BinSCII segments per output file
-                        to "num".  As above, the number may be specified in
-                        decimal, hex, or octal.  If no "-s" option is present,
-                        or if "num" is 0, then all BinSCII segments will be
-                        written to a single output file.  To cause each
-                        segment to go into its own output file (like the
-                        Apple II BINSCII program), use "-s 1".  See below
-                        for an explanation of output files.
-
-     -h                 Print a short summary of bsc's options on the
-                        standard output.
-
-These options, if present, may appear in any order, provided that they
-appear before the filename.  Spaces may appear between an option letter
-and its value, but are not necessary.
-
-The filename is the name of the UNIX file to be BinSCII'd.  The stored
-ProDOS filename will be taken from the UNIX name, with lowercase letters
-converted to uppercase and with invalid characters replaced with the
-letter "X".  The ProDOS name will be truncated to 15 letters if the UNIX
-name is longer than that.
-
-The stored ProDOS creation and modification times will be taken from the
-UNIX input file.
-
-The output of bsc is a set of one or more files, each containing one or
-more BinSCII segments.  By default, all BinSCII segments are written to
-a single output file, which has the same name as the input file with a
-".0" appended to the end.  If the "-s" option is given on the command
-line with a value greater than zero, then the number of segments per
-output file will be limited to the specified value, and if more than one
-output file is needed, the second file will have ".1" appended to the
-name, the third will have ".2" appended, and so forth.  For example, if
-"foo" is a large UNIX file, the command "bsc -s3 foo" will create files
-"foo.0", "foo.1", "foo.2", etc., each containing 3 BinSCII segments.
-
-WARNING:  IF A FILE WITH THE SAME NAME AS A BSC OUTPUT FILE ALREADY
-EXISTS, THE PRE-EXISTING FILE WILL BE SILENTLY OVERWRITTEN BY THE BSC
-OUTPUT FILE.  Before typing "bsc foo", it is probably a good idea to
-make sure you don't already have an important data file called "foo.0".
-
-Bsc will refuse to BinSCII a file larger than 16777216 bytes (16 meg),
-since that is the maximum size of a ProDOS file.
-
-An example:  Suppose a UNIX file called "picture" contains a standard
-Apple IIGS super-hires screen image.  The command
-
-     bsc -tpic picture
-
-will create the file "picture.0" in a format suitable for downloading to
-an Apple II and un-BinSCIIing, or for posting to comp.binaries.apple2.
-When un-BinSCII'd on an Apple II, it will automatically be converted to
-a PIC ($C1) file.
-
-INFORMATION
------------
-
-This program is freeware.  It comes with no warranty of any kind--in
-particular, I cannot guarantee that it is free of bugs.  Use it at your
-own risk.
-
-When the inevitable bugs DO appear, send e-mail to one of the addresses
-below.  I welcome bug reports, comments, complaints, and suggestions for
-improvement.
-
-Thanks to Marcel J. E. Mol, whose sciibin program was a valuable source
-of technical information on BinSCII.
-
-               - Neil Parker
-                 parker@corona.uoregon.edu
-                 nparker@cie.uoregon.edu
-                 parkern@jacobs.cs.orst.edu
-
=bsc.c
-/*
- * Program: bsc.c
- * Version: 1.0
- * Author:  Neil Parker
- * Date:    14 Mar 1991
- * Files:   bsc.c     (source code)
- *          crc.h     (CRC generation routine)
- *          pftypes.h (ProDOS file types)
- * Purpose: Create BinSCII files on UNIX
- *
- * This program is freeware.  It comes with no warranty whatsoever; use
- * at your own risk.
- */
-#include <stdio.h>
-#ifdef SYSTEMV
-#include <string.h>
-#define rindex strrchr
-#else
-#include <strings.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <time.h>
-#include <ctype.h>
-#include "crc.h"
-#include "pftypes.h"
-
-unsigned int getnumber(),getftype();
-
-unsigned char inbuf[49],   /* buffer for reading from input */
-              header[28];  /* buffer for BinSCII header */
-
-char outbuf[65],           /* buffer for coded output lines */
-     binsciifile[256],     /* buffer for ProDOS filename in header */
-     *infile,              /* name of input file */
-     outfile[256],         /* name of current output file */
-     *filestart="FiLeStArTfIlEsTaRt", /* BinSCII intro marker */
-     *alphabet=            /* code alphabet */
-     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()",
-     *progname;            /* program name, for error messages */
-
-unsigned int crc,          /* running CRC counter */
-             processed,    /* number of bytes already processed */
-             remaining,    /* number of bytes yet to be processed */
-             auxtype=0,    /* ProDOS aux type (default=0) */
-             access=0xc3,  /* ProDOS access mode (default=dnwr) */
-             filetype=6,   /* ProDOS file type (default=bin) */
-             storagetype,  /* ProDOS file storage type */
-             blocks,       /* number of blocks in ProDOS file */
-             seqno,        /* output file sequence number */
-             segsplit=0;   /* output segment split count (default=0) */
-             segno;        /* output segment number */
-
-long filesize,             /* input file size */
-     segmentlen;           /* count of bytes remaining in current segment */
-
-FILE *fi,                  /* input file pointer */
-     *fo;                  /* current output file pointer */
-
-main(argc,argv)
-int argc;
-char **argv;
-{
-        char *c;
-        unsigned char *uc;
-        unsigned int numread;
-        long lastbyte;
-        struct stat statbuf;
-        struct tm *timebuf;
-
-/* get program so we can print it in usage() and help() */
-
-        if((progname=rindex(*argv,'/'))==NULL)
-                progname= *argv;
-        else
-                progname++;
-
-/* get and interpret command-line arguments */
-
-        if(argc<2)
-                usage();
-
-        while(argc-- >1) {
-                argv++;
-                if(**argv=='-') {
-                        switch(argv[0][1]) {
-
-                        case 'h': /* help */
-                                help(); /* doesn't return */
-
-                        case 't': /* type */
-                                c= *argv+2;
-                                if(*c=='\0') {
-                                        argv++;
-                                        argc--;
-                                        if(argc<1)
-                                                usage();
-                                        c= *argv;
-                                }
-                                filetype=getftype(c);
-                                break;
-
-                        case 'a': /* auxtype */
-                                c= *argv+2;
-                                if(*c=='\0') {
-                                        argv++;
-                                        argc--;
-                                        if(argc<1)
-                                                usage();
-                                        c= *argv;
-                                }
-                                auxtype=getnumber(c);
-                                break;
-                        
-                        case 's': /* segments/file */
-                                c= *argv+2;
-                                if(*c=='\0') {
-                                        argv++;
-                                        argc--;
-                                        if(argc<1)
-                                                usage();
-                                        c= *argv;
-                                }
-                                segsplit=getnumber(c);
-                                segsplit=segsplit==0?32767:segsplit;
-                                break;
-
-                        case 'm': /* access mode */
-                                c= *argv+2;
-                                if(*c=='\0') {
-                                        argv++;
-                                        argc--;
-                                        if(argc<1)
-                                                usage();
-                                        c= *argv;
-                                }
-                                access=0;
-                                while(*c!='\0') {
-                                        switch(*c) {
-                                        case 'd':
-                                                access|=0x80;
-                                                break;
-                                        case 'n':
-                                                access|=0x40;
-                                                break;
-                                        case 'b':
-                                                access|=0x20;
-                                                break;
-                                        case 'i':
-                                                access|=0x04;
-                                                break;
-                                        case 'w':
-                                                access|=0x02;
-                                                break;
-                                        case 'r':
-                                                access|=0x01;
-                                                break;
-                                        default:
-                                                usage();
-                                        }
-                                        c++;
-                                }
-                                break;
-
-                        default:
-                                usage();
-
-                        } /* END switch(argv[0][1]) */
-                } else { /* **argv!='-' */
-
-                        infile= *argv;
-                        if(argc>1) /* filename must be last arg */
-                                usage();
-
-                } /* END if(**argv=='-') */
-
-        } /* END while(argc-->1) */
-
-/* Convert UNIX pathname into valid ProDOS file name */
-
-        if((c=rindex(infile,'/'))==NULL) /* delete leading path components */
-                c=infile;
-        else
-                c++;
-
-        strcpy(&binsciifile[1],c);
-        c=binsciifile+1;
-
-        if(!isalpha(*c)) /* initial invalid char -> 'X' */
-                *c='X';
-        for(;*c!='\0';c++)
-                if(isalnum(*c)||*c=='.') {
-                        if(islower(*c))        /* upshift lowercase */
-                                *c=toupper(*c);
-                } else                         /* invalid char -> 'X' */
-                        *c='X';
-
-        c=binsciifile+1;
-        if(*c=='\0') {
-                fprintf(stderr,"empty ProDOS file name\n");
-                exit(1);
-        }
-        c[15]='\0';  /* truncate name at 15 chars */
-        binsciifile[0]=alphabet[strlen(c)-1]; /* encode name length */
-        strcat(c,"                "); /* 16 spaces */
-        c[15]='\0';  /* pad with spaces, and truncate to 15 again */
-
-/* Make sure input file exists, and get its size and dates */
-
-        if(stat(infile,&statbuf)<0) {
-                perror("getting input file status");
-                exit(1);
-        }
-
-        filesize=statbuf.st_size;
-        lastbyte=filesize-1;
-        if(filesize>16777216L) { /* ProDOS can't handle files >16Mb */
-                fprintf(stderr,"Input file too big for ProDOS\n");
-                exit(1);
-        }
-
-        if(filesize>131072L) {
-                storagetype=3; /* tree */
-                blocks=3+lastbyte/131072+lastbyte/512;
-        } else if(filesize>512L) {
-                storagetype=2; /* sapling */
-                blocks=2+lastbyte/512;
-        } else {
-                storagetype=1; /* seedling */
-                blocks=1;
-        }
-
-/* Get file times into BinSCII header */
-
-        timebuf=localtime(&statbuf.st_ctime);
-        timebuf->tm_mon+=1; /* UNIX month is 0-11, ProDOS is 1-12 */
-        header[13]=timebuf->tm_mday|(timebuf->tm_mon<<5); /* create date */
-        header[14]=(timebuf->tm_mon>>3)|(timebuf->tm_year<<1);
-        header[15]=timebuf->tm_min; /* create time */
-        header[16]=timebuf->tm_hour;
-
-        timebuf=localtime(&statbuf.st_mtime);
-        timebuf->tm_mon+=1;
-        header[17]=timebuf->tm_mday|(timebuf->tm_mon<<5); /* mod date */
-        header[18]=(timebuf->tm_mon>>3)|(timebuf->tm_year<<1);
-        header[19]=timebuf->tm_min; /* mod time */
-        header[20]=timebuf->tm_hour;
-
-/* Fill out remaining constant portion of header */
-
-        header[0]=filesize&0xff;
-        header[1]=(filesize>>8)&0xff;
-        header[2]=(filesize>>16)&0xff;
-
-        header[6]=access;
-
-        header[7]=filetype;
-
-        header[8]=auxtype&0xff;
-        header[9]=(auxtype>>8)&0xff;
-
-        header[10]=storagetype;
-
-        header[11]=blocks&0xff;
-        header[12]=(blocks>>8)&0xff;
-
-        header[26]=0;
-
-/* open input file; initialize counters */
-
-        if((fi=fopen(infile,"r"))==NULL) {
-                perror("opening input file");
-                exit(1);
-        }
-
-        processed=0;
-        remaining=filesize;
-        segno=0;
-        seqno=0;
-
-        while(remaining>0) { /* loop until nothing left to process */
-
-                segmentlen=remaining>0x3000?0x3000:remaining;
-                     /* max segment size is 0x3000 */
-
-/* see if new output file should be created--if so, form name and create
-   it */
-
-                if(segno==0) {
-                        sprintf(outfile,"%s.%d",infile,seqno++);
-                        if((fo=fopen(outfile,"w"))==NULL) {
-                                sprintf(outbuf,
-                                        "opening output file %s",outfile);
-                                perror(outbuf);
-                                exit(1);
-                        }
-                }
-
-/* write headers to new file */
-
-                fprintf(fo,"%s\n",filestart);
-                fprintf(fo,"%s\n",alphabet);
-                fprintf(fo,"%s",binsciifile);
-
-/* set up variable part of header */
-
-                header[3]=processed&0xff; /* start addr of this seg */
-                header[4]=(processed>>8)&0xff;
-                header[5]=(processed>>16)&0xff;
-
-                header[21]=segmentlen&0xff; /* length of this seg */
-                header[22]=(segmentlen>>8)&0xff;
-                header[23]=(segmentlen>>16)&0xff;
-
-/* compute header CRC */
-
-                crc=0;
-                for(uc=header;uc!=header+24;uc++)
-                        crc=updcrc(*uc,crc);
-
-                header[24]=crc&0xff;
-                header[25]=(crc>>8)&0xff;
-
-/* code header and send it on its way */
-
-                encode(header,outbuf,27);
-                fprintf(fo,"%s\n",outbuf);
-
-/* start working on segment data */
-
-                crc=0;
-                while(segmentlen>0) { /* loop until end of seg */
-
-                        bzero(inbuf,48); /* zero buffer in case there's
-                             not enough data to fill it */
-
-/* get 48 bytes (or less if at end) from file */
-
-                        if((int)(numread=fread(inbuf,1,48,fi))<0) {
-                                perror("reading input file");
-                                exit(0);
-                        }
-
-/* update CRC for this line */
-
-                        for(uc=inbuf;uc!=inbuf+48;uc++)
-                                crc=updcrc(*uc,crc);
-
-/* code the line and send it on its way */
-
-                        encode(inbuf,outbuf,48);
-                        fprintf(fo,"%s\n",outbuf);
-
-                        segmentlen-=numread;
-                        remaining-=numread;
-                        processed+=numread;
-                } /* END while(segmentlen>0) */
-
-/* end of segment--code and write the CRC */
-
-                inbuf[0]=crc&0xff;
-                inbuf[1]=(crc>>8)&0xff;
-                inbuf[2]=0;
-
-                encode(inbuf,outbuf,3);
-                fprintf(fo,"%s\n",outbuf);
-
-/* if end of output file, close it and prepare for next output file */
-
-                if(++segno==segsplit) {
-                        segno=0;
-                        fclose(fo);
-                }
-
-        } /* END while(remaining>0) */
-
-/* all done--close and exit */
-
-        if(segno!=0)
-                fclose(fo);
-        fclose(fi);
-        exit(0);
-}
-
-/* subroutine to encode a line of data */
-
-encode(input,output,length)
-unsigned char *input;
-char *output;
-int length;
-{
-        int i;
-        char *o;
-
-        o=output;
-        for(i=0;i<length;i+=3) {
-                *o++ =alphabet[input[i+2]&0x3f];
-                *o++ =alphabet[((input[i+2]>>6)|(input[i+1]<<2))&0x3f];
-                *o++ =alphabet[((input[i+1]>>4)|(input[i]<<4))&0x3f];
-                *o++ =alphabet[input[i]>>2];
-        }
-        *o='\0';
-}
-
-/* subroutine to get a file type from the command line */
-
-unsigned int getftype(c)
-char *c;
-{
-        int i;
-        unsigned int retcode;
-
-        for(i=0;i<FTYPESIZE;i++) /* loop over file types */
-                if(!strcmp(c,filetypes[i].name)) {
-                        retcode=filetypes[i].code;
-                        return retcode&0xff;
-                }
-        return getnumber(c)&0xff; /* if not found, try to parse a number */
-}
-
-/* subroutine to get a decimal, hex, or octal number from command line */
-
-unsigned int getnumber(c)
-char *c;
-{
-        unsigned int i;
-
-        if(*c=='$') { /* $nn -> hex */
-                sscanf(c+1,"%x",&i);
-                return i;
-        }
-        if(!isdigit(*c))
-                usage();
-        if(*c=='0')
-                if(c[1]=='x'||c[1]=='X')
-                        sscanf(c+2,"%x",&i); /* 0xnn or 0Xnn -> hex */
-                else
-                        sscanf(c,"%o",&i);   /* 0nn -> octal */
-        else
-                sscanf(c,"%d",&i);           /* nn -> decimal */
-        return i;
-}
-
-usage()
-{
-        fprintf(stderr,
-                "usage: %s [-t <type>] [-a <aux>] [-m <mode>] [-s <num>] <file>\n",
-                progname);
-        fprintf(stderr,"       %s -h     (for help)\n",progname);
-        exit(1);
-}
-
-help()
-{
-        printf("Usage: %s [<args>] <file>\n",progname);
-        printf("args: -t <type> = set ProDOS file type to <type>\n");
-        printf("      -a <aux>  = set ProDOS aux type to <aux>\n");
-        printf("      -m <mode> = set ProDOS access mode--<mode> may be any\n");
-        printf("                  combination of d, n, b, i, w, or r\n");
-        printf("      -s <num>  = set number of segs/output file to <num>\n");
-        printf("      -h        = print this help message\n");
-        exit(0);
-}
=crc.h
-/*
- * updcrc macro derived from article Copyright (C) 1986 Stephen Satchell. 
- *  NOTE: First srgument must be in range 0 to 255.
- *        Second argument is referenced twice.
- * 
- * Programmers may incorporate any or all code into their programs, 
- * giving proper credit within the source. Publication of the 
- * source routines is permitted so long as proper credit is given 
- * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg, 
- * Omen Technology.
- */
-
- /* #define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp) */
-#define updcrc(cp, crc) ( (crctab[((crc >> 8) & 0xFF) ^ cp] ^ (crc << 8)) & 0xFFFF)
-
-
-/* crctab calculated by Mark G. Mendel, Network Systems Corporation */
-static unsigned short crctab[256] = {
-    0x0000,  0x1021,  0x2042,  0x3063,  0x4084,  0x50a5,  0x60c6,  0x70e7,
-    0x8108,  0x9129,  0xa14a,  0xb16b,  0xc18c,  0xd1ad,  0xe1ce,  0xf1ef,
-    0x1231,  0x0210,  0x3273,  0x2252,  0x52b5,  0x4294,  0x72f7,  0x62d6,
-    0x9339,  0x8318,  0xb37b,  0xa35a,  0xd3bd,  0xc39c,  0xf3ff,  0xe3de,
-    0x2462,  0x3443,  0x0420,  0x1401,  0x64e6,  0x74c7,  0x44a4,  0x5485,
-    0xa56a,  0xb54b,  0x8528,  0x9509,  0xe5ee,  0xf5cf,  0xc5ac,  0xd58d,
-    0x3653,  0x2672,  0x1611,  0x0630,  0x76d7,  0x66f6,  0x5695,  0x46b4,
-    0xb75b,  0xa77a,  0x9719,  0x8738,  0xf7df,  0xe7fe,  0xd79d,  0xc7bc,
-    0x48c4,  0x58e5,  0x6886,  0x78a7,  0x0840,  0x1861,  0x2802,  0x3823,
-    0xc9cc,  0xd9ed,  0xe98e,  0xf9af,  0x8948,  0x9969,  0xa90a,  0xb92b,
-    0x5af5,  0x4ad4,  0x7ab7,  0x6a96,  0x1a71,  0x0a50,  0x3a33,  0x2a12,
-    0xdbfd,  0xcbdc,  0xfbbf,  0xeb9e,  0x9b79,  0x8b58,  0xbb3b,  0xab1a,
-    0x6ca6,  0x7c87,  0x4ce4,  0x5cc5,  0x2c22,  0x3c03,  0x0c60,  0x1c41,
-    0xedae,  0xfd8f,  0xcdec,  0xddcd,  0xad2a,  0xbd0b,  0x8d68,  0x9d49,
-    0x7e97,  0x6eb6,  0x5ed5,  0x4ef4,  0x3e13,  0x2e32,  0x1e51,  0x0e70,
-    0xff9f,  0xefbe,  0xdfdd,  0xcffc,  0xbf1b,  0xaf3a,  0x9f59,  0x8f78,
-    0x9188,  0x81a9,  0xb1ca,  0xa1eb,  0xd10c,  0xc12d,  0xf14e,  0xe16f,
-    0x1080,  0x00a1,  0x30c2,  0x20e3,  0x5004,  0x4025,  0x7046,  0x6067,
-    0x83b9,  0x9398,  0xa3fb,  0xb3da,  0xc33d,  0xd31c,  0xe37f,  0xf35e,
-    0x02b1,  0x1290,  0x22f3,  0x32d2,  0x4235,  0x5214,  0x6277,  0x7256,
-    0xb5ea,  0xa5cb,  0x95a8,  0x8589,  0xf56e,  0xe54f,  0xd52c,  0xc50d,
-    0x34e2,  0x24c3,  0x14a0,  0x0481,  0x7466,  0x6447,  0x5424,  0x4405,
-    0xa7db,  0xb7fa,  0x8799,  0x97b8,  0xe75f,  0xf77e,  0xc71d,  0xd73c,
-    0x26d3,  0x36f2,  0x0691,  0x16b0,  0x6657,  0x7676,  0x4615,  0x5634,
-    0xd94c,  0xc96d,  0xf90e,  0xe92f,  0x99c8,  0x89e9,  0xb98a,  0xa9ab,
-    0x5844,  0x4865,  0x7806,  0x6827,  0x18c0,  0x08e1,  0x3882,  0x28a3,
-    0xcb7d,  0xdb5c,  0xeb3f,  0xfb1e,  0x8bf9,  0x9bd8,  0xabbb,  0xbb9a,
-    0x4a75,  0x5a54,  0x6a37,  0x7a16,  0x0af1,  0x1ad0,  0x2ab3,  0x3a92,
-    0xfd2e,  0xed0f,  0xdd6c,  0xcd4d,  0xbdaa,  0xad8b,  0x9de8,  0x8dc9,
-    0x7c26,  0x6c07,  0x5c64,  0x4c45,  0x3ca2,  0x2c83,  0x1ce0,  0x0cc1,
-    0xef1f,  0xff3e,  0xcf5d,  0xdf7c,  0xaf9b,  0xbfba,  0x8fd9,  0x9ff8,
-    0x6e17,  0x7e36,  0x4e55,  0x5e74,  0x2e93,  0x3eb2,  0x0ed1,  0x1ef0
-};
-
=pftypes.h
-/*
- * Apple II ProDOS file types as of September, 1990
- *
- * See "About Apple II File Type Notes" by Apple Developer Technical
- * Support for more information.
- * 
- * This list is taken directly from the above named document, with the
- * exception of the file types $B6 and $F9, for which the abbreviations
- * "str" and "p16" are often found alongside the official abbreviations
- * ("pif" and "os" respectively).
- */
-
-struct ftypes {
-        unsigned char code;
-        char name[4];
-} filetypes[] = {
-        0x00, "unk", /* Unknown */
-        0x01, "bad", /* Bad blocks */
-        0x02, "pcd", /* Apple /// Pascal code */
-        0x03, "ptx", /* Apple /// Pascal text */
-        0x04, "txt", /* ASCII text */
-        0x05, "pda", /* Apple /// Pascal data */
-        0x06, "bin", /* Binary */
-        0x07, "fnt", /* Apple /// Font */
-        0x08, "fot", /* Apple II or /// Graphics */
-        0x09, "ba3", /* Apple /// BASIC program */
-        0x0A, "da3", /* Apple /// BASIC data */
-        0x0B, "wpf", /* Apple /// Word Processor */
-        0x0C, "sos", /* Apple /// SOS System */
-        0x0F, "dir", /* Folder */
-        0x10, "rpd", /* Apple /// RPS data */
-        0x11, "rpi", /* Apple /// RPS index */
-        0x12, "afd", /* Apple /// AppleFile discard */
-        0x13, "afm", /* Apple /// AppleFile model */
-        0x14, "afr", /* Apple /// AppleFile report format */
-        0x15, "scl", /* Apple /// screen library */
-        0x16, "pfs", /* PFS document */
-        0x19, "adb", /* AppleWorks Data Base */
-        0x1A, "awp", /* AppleWorks Word Processor */
-        0x1B, "asp", /* AppleWorks Spreadsheet */
-        0x20, "tdm", /* Desktop Manager document */
-        0x2A, "8sc", /* Apple II Source Code */
-        0x2B, "8ob", /* Apple II Object Code */
-        0x2C, "8ic", /* Apple II Interpreted Code */
-        0x2D, "8ld", /* Apple II Language Data */
-        0x2E, "p8c", /* ProDOS 8 code module */
-        0x42, "ftd", /* File Type Names */
-        0x50, "gwp", /* Apple IIGS Word Processor */
-        0x51, "gss", /* Apple IIGS Spreadsheet */
-        0x52, "gdb", /* Apple IIGS Data Base */
-        0x53, "drw", /* Drawing */
-        0x54, "gdp", /* Desktop Publishing */
-        0x55, "hmd", /* Hypermedia */
-        0x56, "edu", /* Educational Data */
-        0x57, "stn", /* Stationery */
-        0x58, "hlp", /* Help File */
-        0x59, "com", /* Communications File */
-        0x5A, "cfg", /* Configuration file */
-        0x5B, "anm", /* Animation file */
-        0x5C, "mum", /* Multimedia document */
-        0x5D, "ent", /* Game/Entertainment document */
-        0x5E, "dvu", /* Development utility document */
-        0x6B, "bio", /* PC Transporter BIOS */
-        0x6D, "tdr", /* PC Transporter driver */
-        0x6E, "pre", /* PC Transporter pre-boot */
-        0x6F, "hdv", /* PC Transporter volume */
-        0xA0, "wp",  /* WordPerfect document */
-        0xAB, "gsb", /* Apple IIGS BASIC program */
-        0xAC, "tdf", /* Apple IIGS BASIC TDF */
-        0xAD, "bdf", /* Apple IIGS BASIC data */
-        0xB0, "src", /* Apple IIGS  source code */
-        0xB1, "obj", /* Apple IIGS object code */
-        0xB2, "lib", /* Apple IIGS Library file */
-        0xB3, "s16", /* GS/OS application */
-        0xB4, "rtl", /* GS/OS Run-Time Library */
-        0xB5, "exe", /* GS/OS Shell application */
-        0xB6, "pif", /* Permanent initialization file */
-        0xB6, "str", /* (alternate for PIF) */
-        0xB7, "tif", /* Temporary initialization file */
-        0xB8, "nda", /* New desk accessory */
-        0xB9, "cda", /* Classic desk accessory */
-        0xBA, "tol", /* Tool */
-        0xBB, "dvr", /* Apple IIGS Device Driver File */
-        0xBC, "ldf", /* Load file (generic) */
-        0xBD, "fst", /* GS/OS File System Translator */
-        0xBF, "doc", /* GS/OS document */
-        0xC0, "pnt", /* Packed Super Hi-Res picture */
-        0xC1, "pic", /* Super Hi-Res picture */
-        0xC2, "ani", /* Paintworks animation */
-        0xC3, "pal", /* Paintworks palette */
-        0xC5, "oog", /* Object-oriented graphics */
-        0xC6, "scr", /* Script */
-        0xC7, "cdv", /* Control Panel document */
-        0xC8, "fon", /* Font */
-        0xC9, "fnd", /* Finder data */
-        0xCA, "icn", /* Icons */
-        0xD5, "mus", /* Music sequence */
-        0xD6, "ins", /* Instrument */
-        0xD7, "mdi", /* MIDI data */
-        0xD8, "snd", /* Sampled sound */
-        0xDB, "dbm", /* DB Master document */
-        0xE0, "lbr", /* Archival library */
-        0xE2, "atk", /* AppleTalk data */
-        0xEE, "r16", /* EDASM 816 relocatable file */
-        0xEF, "pas", /* Pascal area */
-        0xF0, "cmd", /* BASIC command */
-        0xF9, "os",  /* GS/OS System file */
-        0xF9, "p16", /* (alternate for GS/OS System file) */
-        0xFA, "int", /* Integer BASIC program */
-        0xFB, "ivr", /* Integer BASIC variables */
-        0xFC, "bas", /* AppleSoft BASIC program */
-        0xFD, "var", /* AppleSoft BASIC variables */
-        0xFE, "rel", /* Relocatable code */
-        0xFF, "sys"  /* ProDOS 8 application */
-};
-
-#define FTYPESIZE sizeof(filetypes)/sizeof(struct ftypes)
+ END OF ARCHIVE
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads