#include <fcntl.h>

/* globals to override the load point for the image loader  */
/* the loader centres partial images on the screen
   if the global is set > 39 (and < 80 is implicit) */

/* re: global load co-ordinates
   initially this was developed to use global cords
   for the ProDOS library so when creating the DOS 3.3
   library I left it in for backward compatibility */
char XPIC=0;
char YPIC=0;


/*

When open is used to creat a file under DOS 3.3, param3 is the file's type:

    Param3,hex    File type

    00            Text
    01            Integer basic
    02            Applesoft basic
    04            Binary
    08            Relocatable
    10            S-type file
    20            A-type file
    40            B-type file

*/

extern unsigned HB[];


int piclode(name)
char *name;
{
   int fh,y,y1=0,x1,bos;
   int c = -1, fa = 0, fl = 0;
   int height,packet;
   char tempchar[2];

   fh = open(name,O_RDONLY,4); /* open a binary file */
   if (fh == -1)return -1;

   /* is it a RAG ? */
   c = read(fh,&fa,2);
   if (c == 2)c = read(fh,&fl,2);
   if (c == 2)c = read(fh,tempchar,2);
   if (c == 2) {
        packet= (int)tempchar[0];
        height= (int)tempchar[1];
   }
   else {
       packet = 0;
       height = 0;
       fl = 0;
   }

   fa = (packet * height) + 2;
   if (fa != fl) c = -2;
   else {

       /* center the picture in the screen */
       if(XPIC>39)
          x1 = 20-(packet/2); /* break on even byte boundaries */
       else
          x1 = (int)XPIC;

       if((x1%2)!=0)x1--;

       if(YPIC>191)
          y1=96-(height/2);
       else
          y1=(int)YPIC;

       bos=y1+height;

       for(y=y1;yHB[y]+x1),packet); /* read each raster to the screen */
         if (c!=packet)break;
       }
       if (c == packet)c = 0;
       else c = -2;
   }
   close(fh);

   /* zero our globals each time */
   XPIC=0;
   YPIC=0;

   return c;
}



© Copyright Bill Buckels 2010
All Rights Reserved.