home *** CD-ROM | disk | FTP | other *** search
/ CD Shareware Magazine 1997 January / CD_shareware_1-97.iso / DOS / PRG / STANDARD.ZIP / STANDARD.H < prev   
Encoding:
C/C++ Source or Header  |  1996-03-21  |  4.0 KB  |  187 lines

  1. #ifndef __STANDARD_H
  2. #define __STANDARD_H
  3.  
  4. #define hibytes(value, hsize) (value >> hsize)
  5. #define lobytes(value, hsize) ((value << hsize) >> hsize)
  6. #define segment(thing) ((ubit16)((void _seg *)((void far *)thing)))
  7. #define offset(thing) ((ubit16)((void near *)((void far *)thing)))
  8.  
  9. typedef signed char bit8;
  10. typedef signed short int bit16;
  11. typedef signed long int bit32;
  12.  
  13. typedef unsigned char ubit8;
  14. typedef unsigned short int ubit16;
  15. typedef unsigned long int ubit32;
  16.  
  17. typedef float fbit32;
  18. typedef double fbit64;
  19. typedef long double fbit80;
  20.  
  21. bit8 getbit(bit8 value, bit8 bitnum);
  22. bit8 getbit(bit16 value, bit8 bitnum);
  23. bit8 getbit(bit32 value, bit8 bitnum);
  24. bit8 setbit(bit8 value, bit8 bitnum, bit8 bitval);
  25. bit16 setbit(bit16 value, bit8 bitnum, bit8 bitval);
  26. bit32 setbit(bit32 value, bit8 bitnum, bit8 bitval);
  27. void swap(bit8 *val1, bit8 *val2);
  28. void swap(bit16 *val1, bit16 *val2);
  29. void swap(bit32 *val1, bit32 *val2);
  30. fbit32 ttp(fbit64 x, bit8 ex);
  31. void hout(bit16, bit8);                //Send val to  hardware port
  32. bit8 hin(bit16);                //Get val from hardware port
  33. void setint(bit8, void interrupt far (*isr)());    //Set interrupt vector
  34. void interrupt far (*getint(bit8))();        //Get interrupt vector
  35. void reboot();
  36.  
  37. //Get bits from a --
  38. //bit8
  39. bit8 getbit(bit8 value, bit8 bitnum){
  40.     if(bitnum > 7) return -1;
  41.     return ((ubit8)(value << (7 - bitnum)) >> 7);}
  42. //bit16
  43. bit8 getbit(bit16 value, bit8 bitnum){
  44.     if(bitnum > 15) return -1;
  45.     return ((ubit16)(value << (15 - bitnum)) >> 15);}
  46. //bit32
  47. bit8 getbit(bit32 value, bit8 bitnum){
  48.     if(bitnum > 31) return -1;
  49.     return ((ubit32)(value << (31 - bitnum)) >> 31);}
  50.  
  51. //Set bit of a --
  52. //bit8
  53. bit8 setbit(bit8 value, bit8 bitnum, bit8 bitval)
  54. {
  55.     bit8 bitadd = 1, i;
  56.     if(bitnum > 7) return 0;
  57.  
  58.     if(bitval){
  59.     if(getbit(value, bitnum) == 0) {
  60.         for(i=0;i<bitnum;i++) bitadd *= 2;
  61.         value += bitadd; }
  62.     }
  63.     if(!bitval){
  64.     if(getbit(value, bitnum) == 1) {
  65.         for(i=0;i<bitnum;i++) bitadd *= 2;
  66.         value -= bitadd; }
  67.     }
  68.  
  69.     return value;
  70. }
  71.  
  72. //bit16
  73. bit16 setbit(bit16 value, bit8 bitnum, bit8 bitval)
  74. {
  75.     bit16 bitadd = 1, i;
  76.     if(bitnum > 15) return 0;
  77.  
  78.     if(bitval){
  79.     if(getbit(value, bitnum) == 0) {
  80.         for(i=0;i<bitnum;i++) bitadd *= 2;
  81.         value += bitadd; }
  82.     }
  83.     if(!bitval){
  84.     if(getbit(value, bitnum) == 1) {
  85.         for(i=0;i<bitnum;i++) bitadd *= 2;
  86.         value -= bitadd; }
  87.     }
  88.  
  89.     return value;
  90. }
  91.  
  92. //bit32
  93. bit32 setbit(bit32 value, bit8 bitnum, bit8 bitval)
  94. {
  95.     bit32 bitadd = 1, i;
  96.     if(bitnum > 31) return 0;
  97.  
  98.     if(bitval){
  99.     if(getbit(value, bitnum) == 0) {
  100.         for(i=0;i<bitnum;i++) bitadd *= 2;
  101.         value += bitadd; }
  102.     }
  103.     if(!bitval){
  104.     if(getbit(value, bitnum) == 1) {
  105.         for(i=0;i<bitnum;i++) bitadd *= 2;
  106.         value -= bitadd; }
  107.     }
  108.  
  109.     return value;
  110. }
  111.  
  112. //Swap two values of type -
  113. //bit8
  114. void swap(bit8 *val1, bit8 *val2)
  115. { bit8 temp = *val1; *val1 = *val2; *val2 = temp; }
  116.  
  117. //bit16
  118. void swap(bit16 *val1, bit16 *val2)
  119. { bit16 temp = *val1; *val1 = *val2; *val2 = temp; }
  120.  
  121. //bit32
  122. void swap(bit32 *val1, bit32 *val2)
  123. { bit32 temp = *val1; *val1 = *val2; *val2 = temp; }
  124.  
  125. //Calculate exponent
  126. fbit32 ttp(fbit64 x, bit8 ex)
  127. {
  128.     bit8 i;
  129.     fbit64 tx = x;
  130.  
  131.     if(ex == 0) return 1;
  132.     if(ex == 1) return x;
  133.  
  134.     for(i = 1; i < ex; i++) x *= tx;
  135.     return x;
  136. }
  137.  
  138. void hout(bit16 portid, bit8 value)
  139. {
  140.     asm    mov    DX,portid
  141.     asm    mov    AL,value
  142.     asm    out    DX,AL
  143.  
  144.     return;
  145. }
  146.  
  147. bit8 hin(bit16 portid)
  148. {
  149.     asm    mov    DX,portid
  150.     asm    in    AL,DX
  151.  
  152.     return _AL;
  153. }
  154.  
  155. void setint(bit8 intnum, void interrupt far (*isr)())
  156. {
  157.     bit16 isrseg = hibytes((bit32)isr, 16);
  158.     bit16 isroff = lobytes((bit32)isr, 16);
  159.     asm    mov    AH,0x25
  160.     asm    mov    AL,intnum
  161.     asm    mov    DX,isroff
  162.     asm    mov    CX,isrseg
  163.     asm    push    DS
  164.     asm    mov    DS,CX
  165.     asm    int    0x21
  166.     asm    pop    DS
  167. }
  168.  
  169. void interrupt far (*getint(bit8 intnum))()
  170. {
  171.     bit16 hseg, hoff;
  172.     asm    mov    AH,0x35
  173.     asm    mov    AL,intnum
  174.     asm    int    0x21
  175.     asm    mov     hseg,ES
  176.     asm    mov    hoff,BX
  177.     return (void interrupt far (*)())((void _seg *)(hseg) + (void near *)(hoff));
  178. }
  179.  
  180. void reboot(bit8 wc)
  181. {
  182.     void ((far *rb)()) = (void (far *)())0xFFFF0000;
  183.     rb();
  184.     return;
  185. }
  186.  
  187. #endif