ftp.nice.ch/pub/next/unix/developer/plplot.3.0.s.tar.gz#/plplot/amiga/src/plwindow.c

This is plwindow.c in view mode; [Download] [Up]

#include "plamiga.h"
#include <stdio.h>
#include <math.h>

extern struct PLPrefs PLCurPrefs;

int MaxColors;

struct Screen *PLScreen;        /* For Custom Screen */
struct Window *PLWindow;
struct RastPort *PLSRPort;      /* Screen rastport */
struct RastPort *PLWRPort;      /* Window rastport */
struct ViewPort *PLVPort;
struct ColorMap *PLCMap;
static struct TmpRas PLTmpRas;
static PLANEPTR PLTmpPlane;

struct NewWindow NewWindow = {
   0, 0,
   0, 0,
   0, 1,
   0,
   0,
   NULL,
   NULL,
   NULL,
   NULL,                            /* Screen pointer */
   NULL,
   205, 120, 1000, 1000,
   WBENCHSCREEN
};

void OpenPLWind()
{
   short i;

   if(PLCurPrefs.WinType & PLCUST) {
      struct NewScreen NewScreen = {
         0, 0, 0, 0, 1,
         0, 1,
         HIRES,                        /* default viewmode */
         CUSTOMSCREEN,
         NULL,
         "Plplot Screen",
         NULL,
         NULL
      };

      NewScreen.Height = GfxBase->NormalDisplayRows;
      NewScreen.Width = GfxBase->NormalDisplayColumns;

      if(PLCurPrefs.ScrType & PLLACE) {
         NewScreen.ViewModes |= INTERLACE;
         NewScreen.Height *= 2;
      }
      if(!(PLCurPrefs.ScrType & PLHIRES)) {
         NewScreen.ViewModes &= ~HIRES;
         NewScreen.Width /= 2;
      }

      NewScreen.Depth = PLCurPrefs.Depth;
      NewWindow.Type = CUSTOMSCREEN;
      if((PLScreen = OpenScreen(&NewScreen)) == NULL) {
         fprintf(stderr,"Not enough memory for custom screen.\n");
         CloseLibs();
         pl_exit();
      }
      for(i=0, MaxColors=1; i<PLCurPrefs.Depth; i++)
         MaxColors *= 2;
      PLVPort = &(PLScreen->ViewPort);
      LoadRGB4(PLVPort,&(PLCurPrefs.Color[0]),MaxColors);
      NewWindow.Screen = PLScreen;
      if(PLCurPrefs.CWidth == 0 || PLCurPrefs.CHeight == 0) {
         NewWindow.Width = PLScreen->Width;
         NewWindow.Height = PLScreen->Height - PLScreen->BarHeight - 1;
         NewWindow.LeftEdge = 0;
         NewWindow.TopEdge = PLScreen->BarHeight + 1;
         PLCurPrefs.CXPos = NewWindow.Width;
         PLCurPrefs.CYPos = NewWindow.Height;
         PLCurPrefs.CWidth = NewWindow.Width;
         PLCurPrefs.CHeight = NewWindow.Height;
      }
      else {
         NewWindow.LeftEdge = PLCurPrefs.CXPos;
         NewWindow.TopEdge = PLCurPrefs.CYPos;
         NewWindow.Width = PLCurPrefs.CWidth;
         NewWindow.Height = PLCurPrefs.CHeight;
      }
   }
   else {
      MaxColors = 4;
      NewWindow.LeftEdge = PLCurPrefs.WXPos;
      NewWindow.TopEdge = PLCurPrefs.WYPos;
      NewWindow.Width = PLCurPrefs.WWidth;
      NewWindow.Height = PLCurPrefs.WHeight;
      NewWindow.Type = WBENCHSCREEN;
   }

   NewWindow.IDCMPFlags = NEWSIZE|MENUPICK|CLOSEWINDOW;
   NewWindow.Flags = WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|WINDOWSIZING|
                     SMART_REFRESH|ACTIVATE;
   NewWindow.Title = "Plplot 3.0";

   if((PLWindow = OpenWindow(&NewWindow)) == NULL) {
      fprintf(stderr,"Error opening window.\n");
      if(PLCurPrefs.WinType & PLCUST)
         CloseScreen(PLScreen);
      CloseLibs();
   }

   if(!(PLCurPrefs.WinType & PLCUST))
      PLScreen = PLWindow->WScreen;

   PLSRPort = &(PLScreen->RastPort);
   PLWRPort = PLWindow->RPort;
   PLVPort = &(PLScreen->ViewPort);
   PLCMap = PLVPort->ColorMap;
   PLTmpPlane = AllocRaster(PLScreen->Width,PLScreen->Height);
   if(PLTmpPlane == NULL) {
      CloseWindow(PLWindow);
      if(PLCurPrefs.WinType & PLCUST)
         CloseScreen(PLScreen);
      fprintf(stderr,"Out of memory!");
   }
   InitTmpRas(&PLTmpRas,PLTmpPlane,RASSIZE(PLScreen->Width,PLScreen->Height));
   PLWRPort->TmpRas = &PLTmpRas;

   MakePLMenu();
}

void ClosePLWind()
{
   FreeRaster(PLTmpPlane,PLScreen->Width,PLScreen->Height);
   ClearMenuStrip(PLWindow);
   CloseWindow(PLWindow);
   if((PLScreen->Flags & SCREENTYPE) == CUSTOMSCREEN)
      CloseScreen(PLScreen);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.