clispinner

A simple cli spinner.
git clone https://noulin.net/git/clispinner.git
Log | Files | Refs | LICENSE

clispinner.h (4057B)


      1 #pragma once
      2 
      3 #include "shpPackages/signalTimer/signalTimer.h"
      4 
      5 #define startG(obj) (obj)->f->start(obj)
      6 #define createTheSignalTimerG(obj) (obj)->f->createTheSignalTimer(obj)
      7 #define setSignalTimerG(obj, signalTimer) (obj)->f->setSignalTimer(obj, signalTimer)
      8 //pauseProcessG
      9 #define setSpinStringG(obj, spinString) (obj)->f->setSpinString(obj, spinString)
     10 //setInterval
     11 #define isSpinningG(obj) (obj)->f->isSpinning(obj)
     12 
     13 /* Class clispinner */
     14 typedef struct clispinner clispinnert;
     15 
     16 /* for object inheriting clispinner, cast to clispinner to be able to use this class functions and generics*/
     17 #define cClispinner(self) ( (clispinnert*) self )
     18 
     19 typedef void            (*freeClispinnerFt)      (clispinnert *self);
     20 typedef void            (*terminateClispinnerFt) (clispinnert **self);
     21 typedef char*           (*toStringClispinnerFt)  (clispinnert *self);
     22 typedef clispinnert* (*duplicateClispinnerFt) (clispinnert *self);
     23 typedef void            (*smashClispinnerFt)     (clispinnert **self);
     24 
     25 /**
     26  * free clispinner
     27  */
     28 typedef void            (*finishClispinnerFt)    (clispinnert **self);
     29 
     30 typedef void            (*startClispinnerFt)               (clispinnert *self);
     31 typedef void            (*stopClispinnerFt)                (clispinnert *self);
     32 typedef void            (*createTheSignalTimerClispinnerFt)(clispinnert *self);
     33 typedef void            (*setSignalTimerClispinnerFt)      (clispinnert *self, signalTimert * signalTimer);
     34 typedef signalTimert*   (*getSignalTimerClispinnerFt)      (clispinnert *self);
     35 typedef void            (*pauseProcessClispinnerFt)        (clispinnert *self);
     36 typedef void            (*setSpinStringClispinnerFt)       (clispinnert *self, const char *spinString);
     37 typedef void            (*setIntervalClispinnerFt)         (clispinnert *self, u64 interval);
     38 typedef bool            (*isSpinningClispinnerFt)          (clispinnert *self);
     39 
     40 #define CLISPINNERTITLESIZE 1024
     41 
     42 /**
     43  * class functions
     44  * allocated once for all objects
     45  *
     46  * freed with finalizeClispinner
     47  */
     48 
     49 /**
     50  * use this define in child classes and add the new function after this class functions
     51  *
     52  * in this define, add the methods after <finishClispinnerFt    finish;>
     53  *
     54  * Example:
     55  * #define RINGFUNCTIONST \n *   CLISPINNERFUNCTIONST; \n *   setSizeRingFt           setSize
     56  */
     57 #define CLISPINNERFUNCTIONST \
     58   startClispinnerFt                start;\
     59   stopClispinnerFt                 stop;\
     60   createTheSignalTimerClispinnerFt createTheSignalTimer;\
     61   setSignalTimerClispinnerFt       setSignalTimer;\
     62   getSignalTimerClispinnerFt       getSignalTimer;\
     63   pauseProcessClispinnerFt         pauseProcess;\
     64   setSpinStringClispinnerFt        setSpinString;\
     65   setIntervalClispinnerFt          setInterval;\
     66   isSpinningClispinnerFt           isSpinning;
     67 
     68 
     69 typedef struct {
     70   freeClispinnerFt      free;
     71   terminateClispinnerFt terminate;
     72   toStringClispinnerFt  toString;
     73   duplicateClispinnerFt duplicate;
     74   smashClispinnerFt     smash;
     75   finishClispinnerFt    finish;
     76   CLISPINNERFUNCTIONST;
     77 } clispinnerFunctionst;
     78 
     79 /**
     80  * class
     81  */
     82 struct clispinner {
     83   const char           *type;
     84   clispinnerFunctionst *f;
     85   bool                 isSpinning;
     86   indexer              ix;
     87   u64                  interval;
     88   char                 title[CLISPINNERTITLESIZE];
     89   char                 spinString[32];
     90 };
     91 
     92 /* clispinner */
     93 
     94 #define createClispinner(obj) clispinnert obj; initiateClispinner(&obj)
     95 #define createAllocateClispinner(obj) clispinnert *obj; initiateAllocateClispinner(&obj)
     96 
     97 void initiateClispinner(clispinnert *self);
     98 void initiateAllocateClispinner(clispinnert **self);
     99 void finalizeClispinner(void);
    100 
    101 /* initialize class methods, call registerMethodsClispinner from classes inheriting this class */
    102 void registerMethodsClispinner(clispinnerFunctionst *f);
    103 
    104 clispinnert* allocClispinner(u64 interval, const char *title);
    105 
    106 /* end class clispinner*/
    107 
    108 #define isClispinnerCompiledWithCurrentLisheepyVersion checkLibsheepyVersionClispinner(LIBSHEEPY_VERSION)
    109 bool checkLibsheepyVersionClispinner(const char *currentLibsheepyVersion);