[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

OOPIUM



Something to think about?  Here's the only chunk of source I've written,
if someone wants to help the idea, speak up.  I need to figure out what
format the package info should be stored in on the disk, and I need
someone to write a parser for it.  BTW, I'm giving serious thought to
installing Debian on my 386.(Which, AAMOF, will by the end of the year be
mounted inside a small submarine I'm building as a control computer)
TTYL!



                            ---
                        Paul Anderson
		   paul @ geeky1.ebtech.net
    Author of Star Spek(a tongue in cheek pun on Star trek)
e-mail: starspek-request@lowdown.com with subscribe as the subject
I hear it's hilarious.               Maintainer of the Tips-HOWTO.
          http://www.netcom.com/~tonyh3/speck.html
     Diplomacy is saying "nice doggy" until you find a rock.
//
// The OPPIUM package manager's package class
//
#ifndef PACKAGE_H
#define PACKAGE_H  // Prevent multiple inclusions

#include <sys/vfs.h>
#include <sys/utsname.h>
#include <fstream.h>

class Error {	// Universal error handler mechanism
public:
    enum err {	// Various errors to be had
	err_allclear = 0,	// No error, all's clear
	err_filenothere,	// File not found
	err_filebadperms,	// Bad perms
	err_cantdetect,		// Can't detect file format
	err_unk,		// I don't know...
	err_nospace		// No free disk space!
    };
    virtual int Error(err e);
};

class ThisSystem {	// System info, used for a number of purposes
public:
    statfs * root;	// Statistics on the root fs - obtained with statfs()
    utsname * kernelinfo// Kernel info from uname()
    // Need to figure out what format package data should be stored in
    // FIXME: Put in db access
    ThisSystem();
};

enum {		// Package types we know of
    RPM = 1,	// RPM
    DPKG,	// Debian Package Manager
    TGZ		// Tarball
}
    

class Package {		// The package itself
    friend ThisSystem;
public:
    template<class T> int become(T name, int packagetype);
    int become(char * fname, int packagetype);
    int become(fstream openfile, int packagetype);
    int become(char * fname);
    int become(String fname);
    int become(String fname, int packagetype);
    // Using a function template allows me to write the code once, a nice feature
    int operator=(char * fname);
    int operator=(String fname);
    int operator=(fstream openfile);
    // The above initiate another nicety, that ability to say: package="what"
    int checkInstalled(); 	// Check if it's installed, after becoming
    int installPkg(); 		// Install the package which I am
    int removePkg(int pkgid);	// Remove package of certain ID
    int listContents;		// List package contents
    int checkNeeds();		// Insure libraries program may need are installed
    // TODO: Put some of these things in private.
    // Perhaps have installPkg take ThisSystem arg?  
    // Would allow installing over network with ease...  Nifty...
};