home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / BBS / PB_122.ZIP / SDK.ZIP / PB_SDK.H < prev    next >
C/C++ Source or Header  |  1992-03-28  |  37KB  |  954 lines

  1. /*╒═════════════════════════════════════════╤══════════════════════════════╕*/
  2. /*│ ProBoard Software Development Kit v1.21 │  C/C++ library declarations  │*/
  3. /*╞═════════════════════════════════════════╧══════════════════════════════╡*/
  4. /*│           Only functions in this header file are supported             │*/
  5. /*├────────────────────────────────────────────────────────────────────────┤*/
  6. /*│     !! ───────────>> Only use LARGE memory model <<──────────── !!     │*/
  7. /*└────────────────────────────────────────────────────────────────────────┘*/
  8.  
  9.  
  10. #ifdef __cplusplus
  11.  extern "C" {
  12. #endif
  13.  
  14. #define NULL 0L
  15. #define FAR far
  16. #define TRUE 1
  17. #define FALSE 0
  18.  
  19. typedef int           FILE;
  20. typedef unsigned      size_t;
  21. typedef long          clock_t;
  22. typedef long          time_t;
  23. typedef char         *va_list;
  24.  
  25. #define va_start(ap,parmn)  ((ap) = (va_list)&(parmn) + sizeof(parmn))
  26. #define va_arg(ap,type) (*((type *)(ap))++)
  27. #define va_end(ap)
  28.  
  29. struct find_t              /* used by dos_findfirst() & dos_findnext() */
  30.   {
  31.    char     reserved[21];      /* reserved by DOS                      */
  32.    char     attrib;            /* attribute found (FA_XXXX)            */
  33.    unsigned time,date;         /* file's last write                    */
  34.    unsigned long size;         /* file's size                          */
  35.    char     name[13];          /* filename followed by 0 byte          */
  36.   };
  37.  
  38. /* Used in dos_findfirst & dos_findnext */
  39.  
  40. #define FA_NORMAL       0x00
  41. #define FA_RDONLY    0x01
  42. #define FA_HIDDEN    0x02
  43. #define FA_SYSTEM    0x04
  44. #define FA_LABEL    0x08
  45. #define FA_DIREC    0x10
  46. #define FA_ARCH        0x20
  47.  
  48. #define FP_SEG(fp)    ((unsigned)((unsigned long)(fp) >> 16))
  49. #define FP_OFF(fp)  ((unsigned)((unsigned long)(fp)))
  50.  
  51. #define MK_FP(seg,offset) ((void FAR *)(((unsigned long)(seg)<<16) | (unsigned)(offset)))
  52.  
  53. struct WREGS
  54.    {
  55.     unsigned ax,bx,cx,dx,si,di,cflag,flags;
  56.    };
  57.  
  58. struct BREGS
  59.    {
  60.     unsigned char al,ah,bl,bh,cl,ch,dl,dh;
  61.    };
  62.  
  63. union REGS
  64.    {
  65.     struct WREGS x;
  66.     struct BREGS h;
  67.    };
  68.  
  69. struct SREGS
  70.    {
  71.     unsigned es,cs,ss,ds;
  72.    };
  73.  
  74. extern int errno;
  75.  
  76. #define ENOENT  2
  77. #define ENOTDIR    3
  78. #define EMFILE    4
  79. #define EACCES    5
  80. #define EBADF    6
  81. #define ENOMEM    8
  82. #define EINVAL    22
  83. #define EEXIST    80
  84.  
  85. #define E2BIG    1000
  86. #define ENOEXEC    1001
  87. #define EDOM    1002
  88. #define    ERANGE    1003
  89.  
  90. #define O_RDONLY        0
  91. #define O_WRONLY    1
  92. #define O_RDWR        2
  93.  
  94. #define O_APPEND    8
  95. #define O_NOINHERIT    0x80
  96. #define O_CREAT        0x100
  97. #define O_TRUNC        0x200
  98. #define O_EXCL    0x400
  99.  
  100. #define S_IREAD 0x0100
  101. #define S_IWRITE 0x0080
  102.  
  103. #define O_BINARY        0
  104.  
  105. #define F_OK    0       /* does file exist?     */
  106. #define X_OK    1    /* execute permission?    */
  107. #define W_OK    2    /* write permission?    */
  108. #define R_OK    4    /* read permission?    */
  109.  
  110. #define SEEK_SET    0    /* seek from start of file    */
  111. #define SEEK_CUR    1    /* relative to current position    */
  112. #define SEEK_END    2    /* relative to end of file    */
  113.  
  114. #define CLOCKS_PER_SEC    ((clock_t) 100)    /* (clock_t / CLOCKS_PER_SEC) == seconds */
  115. #define CLK_TCK    ((clock_t) 100)    /* (clock_t / CLK_TCK) == seconds    */
  116.  
  117. struct tm
  118.   {
  119.    int tm_sec,         /* seconds 0..59                        */
  120.        tm_min,         /* minutes 0..59                        */
  121.        tm_hour,        /* hour of day 0..23                    */
  122.        tm_mday,        /* day of month 1..31                   */
  123.        tm_mon,         /* month 0..11                          */
  124.        tm_year,        /* years since 1900                     */
  125.        tm_wday,        /* day of week, 0..6 (Sunday..Saturday) */
  126.        tm_yday,        /* day of year, 0..365                  */
  127.        tm_isdst;       /* >0 if daylight savings time          */
  128.                        /* ==0 if not DST                       */
  129.                        /* <0 if don't know                     */
  130.   };
  131.  
  132. FILE *  fopen(const char *,const char *);
  133. FILE *  freopen(const char *,const char *,FILE *);
  134. int     fseek(FILE *,long,int);
  135. long    ftell(FILE *);
  136. char *  fgets(char *,int,FILE *);
  137. int     fgetc(FILE *);
  138. int     fflush(FILE *);
  139. int     fclose(FILE *);
  140. int     fputs(const char *,FILE *);
  141. int     getc(FILE *);
  142. int     getchar(void);
  143. char *  gets(char *);
  144. int     fputc(int,FILE *);
  145. int     putc(int,FILE *);
  146. int     putchar(int);
  147. int     puts(const char *);
  148. size_t  fread(void *,size_t,size_t,FILE *);
  149. size_t  fwrite(const void *,size_t,size_t,FILE *);
  150. int     printf(const char *,...);
  151. int     fprintf(FILE *,const char *,...);
  152. int     vfprintf(FILE *,const char *,va_list);
  153. int     vprintf(const char *,va_list);
  154. int     sprintf(char *,const char *,...);
  155. int     vsprintf(char *,const char *,va_list);
  156. void    setbuf(FILE *,char *);
  157. int     setvbuf(FILE *,char *,int,size_t);
  158. int     remove(const char *);
  159. int     rename(const char *,const char *);
  160. void    rewind(FILE *);
  161. void    clearerr(FILE *);
  162. int     feof(FILE *);
  163.  
  164. int     isalnum(int);
  165. int     isalpha(int);
  166. int     iscntrl(int);
  167. int     isdigit(int);
  168. int     isgraph(int);
  169. int     islower(int);
  170. int     isprint(int);
  171. int     ispunct(int);
  172. int     isspace(int);
  173. int     isupper(int);
  174. int     isxdigit(int);
  175. int     toupper(int);
  176. int     tolower(int);
  177.  
  178. int     int86(int,union REGS *,union REGS *);
  179. int     int86x(int,union REGS *,union REGS *,struct SREGS *);
  180. int     intdos(union REGS *,union REGS *);
  181. int     intdosx(union REGS *,union REGS *,struct SREGS *);
  182. int     dos_findfirst(const char *, unsigned, struct find_t *);
  183. int     dos_findnext(struct find_t *);
  184.  
  185. int     read(int,void *,unsigned);
  186. int     write(int,const void *,unsigned);
  187. int     open(const char *,int);
  188. int     creat(const char *,int);
  189. int     close(int);
  190. int     unlink(const char *);
  191. int     chsize(int, long);
  192. int     dup(int);
  193. int     dup2(int, int);
  194. long    lseek(int,long,int);
  195. int     access(const char *,int);
  196. long    filelength(int);
  197. int     isatty(int);
  198.  
  199. int     atoi(const char *);
  200. long    atol(const char *);
  201. long    strtol(const char *,char **,int);
  202. int     rand(void);
  203. void    srand(unsigned);
  204. void *  calloc(size_t,size_t);
  205. void    free(void *);
  206. void *  malloc(size_t);
  207. void *  realloc(void *,size_t);
  208. char *  getenv(const char *);
  209. int     putenv(const char *);
  210. int     abs(int);
  211. long    labs(long);
  212.  
  213. void *  memcpy(void *,const void *,size_t);
  214. void *  memmove(void *,const void *,size_t);
  215. char *  strcpy(char *,const char *);
  216. char *  strncpy(char *,const char *,size_t);
  217. char *  strcat(char *,const char *);
  218. char *  strncat(char *,const char *,size_t);
  219. int     memcmp(const void *,const void *,size_t);
  220. int     strcmp(const char *,const char *);
  221. int     strncmp(const char *,const char *,size_t);
  222. void *  memchr(const void *,int,size_t);
  223. char *  strchr(const char *,int);
  224. size_t  strcspn(const char *,const char *);
  225. char *  strpbrk(const char *,const char *);
  226. char *  strrchr(const char *,int);
  227. size_t  strspn(const char *,const char *);
  228. char *  strstr(const char *,const char *);
  229. char *  strtok(char *,const char *);
  230. void *  memset(void *,int,size_t);
  231. size_t  strlen(const char *);
  232.  
  233. int     memicmp(const void *,const void *,size_t);
  234. char *  stpcpy(char *,const char *);
  235. int     strcmpl(const char *,const char *);
  236. int     strnicmp(const char *,const char *, size_t);
  237. char *  strdup(const char *);
  238. char *  strlwr(char *);
  239. char *  strupr(char *);
  240. char *  strnset(char *,int,size_t);
  241. char *  strrev(char *);
  242. char *  strset(char *,int);
  243. void    swab(char *,char *,size_t);
  244.  
  245. #define strncmpl(a,b,c) strnicmp((a),(b),(c))
  246. #define stricmp(a,b)    strcmpl((a),(b))
  247.  
  248. clock_t clock(void);
  249. time_t  time(time_t *);
  250. time_t  mktime(struct tm *);
  251. char *  asctime(const struct tm *);
  252. char *  ctime(time_t *);
  253. struct tm * localtime(const time_t *);
  254. struct tm * gmtime(const time_t *);
  255. size_t  strftime(char *,size_t,const char *,struct tm *);
  256.  
  257. #define difftime(t1,t2)   (((time_t)(t1) - (time_t)(t2)))
  258.  
  259. void sleep(time_t);
  260. void usleep(unsigned long);
  261. void msleep(unsigned long);
  262.  
  263. /* ------------------------------------------------------------------------- */
  264. /* ------ END OF STANDARD LIBRARY SECTION ---------------------------------- */
  265. /* ------------------------------------------------------------------------- */
  266.  
  267. /*****************************************************************************/
  268. /****  ProBoard speicific #defines and structures  ***************************/
  269. /*****************************************************************************/
  270.  
  271. typedef unsigned KEY;
  272. typedef unsigned char bool;
  273. typedef unsigned char byte;
  274.  
  275. typedef char Date[3];
  276. typedef char Time[3];
  277. typedef long accessflags;
  278. typedef byte combinedboards[25];
  279.  
  280. /* Modes for Input() */
  281. #define INPUT_ALL       0
  282. #define INPUT_UPFIRST   1
  283. #define INPUT_UPALL     2
  284. #define INPUT_DIGITS    3
  285. #define INPUT_PWD      64   /* OR */
  286. #define INPUT_NOFIELD 128   /* OR */
  287.  
  288. /* Paramaters for SetColor() */
  289. #define BLACK   0x00
  290. #define RED     0x01
  291. #define GREEN   0x02
  292. #define YELLOW  0x03
  293. #define MAGENTA 0x04
  294. #define BLUE    0x05
  295. #define CYAN    0x06
  296. #define WHITE   0x07
  297.  
  298. #define BLINK   0x10   /* OR together for flashing colors      */
  299.  
  300.  
  301. /* Used for MenuFunction() */
  302. #define MENU_GOTOMENU           01
  303. #define MENU_GOSUBMENU          02
  304. #define MENU_PREVMENU           03
  305. #define MENU_GOTOMENUCLEAR      04
  306. #define MENU_SHOWANSASC         05
  307. #define MENU_COUNTRY_CHANGE     06
  308. #define MENU_SHELL              07
  309. #define MENU_VERSION_INFO       08
  310. #define MENU_LOGOFF             09
  311. #define MENU_USAGE_GRAPH        10
  312. #define MENU_PAGESYSOP          11
  313. #define MENU_QUESTIONNAIRE      12
  314. #define MENU_USER_LIST          13
  315. #define MENU_TIME_STAT          14
  316. #define MENU_VIEW_ANS_WAIT      15
  317. #define MENU_CITY_CHANGE        16
  318. #define MENU_PASSWORD_CHANGE    17
  319. #define MENU_LINES_CHANGE       18
  320. #define MENU_CLS_TOGGLE         19
  321. #define MENU_PAUSE_TOGGLE       20
  322. #define MENU_ANSI_TOGGLE        21
  323. #define MENU_MAILCHECK          22
  324. #define MENU_READMSG            23
  325. #define MENU_SCAN_MSG           24
  326. #define MENU_QSCAN_MSG          25
  327. #define MENU_DAYS_GRAPH         26
  328. #define MENU_WRITEMSG           27
  329. #define MENU_COMBINED_SELECT    28
  330. #define MENU_WEEKS_GRAPH        29
  331. #define MENU_RAW_DIR            30
  332. #define MENU_LIST_FILES         31
  333. #define MENU_DOWNLOAD           32
  334. #define MENU_UPLOAD             33
  335. #define MENU_LIST_ARCHIVE       34
  336. #define MENU_KEYWORD_SEARCH     35
  337. #define MENU_FILENAME_SEARCH    36
  338. #define MENU_NEW_FILES          37
  339. #define MENU_VIEW_FILE          38
  340. #define MENU_VIEW_NAMED_FILE    39
  341. #define MENU_FSED_TOGGLE        41
  342. #define MENU_HOTKEY_TOGGLE      42
  343. #define MENU_CLEARMARKED        43
  344. #define MENU_COMBINED_CLEAR     44
  345. #define MENU_VIEW_FILE_WAIT     45
  346. #define MENU_CHANGE_ACCESS      46
  347. #define MENU_LOGENTRY           47
  348. #define MENU_TOPS               48
  349. #define MENU_SET_MSGAREA        49
  350. #define MENU_SHOW_USERS_ONLINE  50
  351. #define MENU_LASTCALLERS        51
  352. #define MENU_USEREDITOR         52
  353. #define MENU_MULTICHAT          53
  354. #define MENU_SET_FILEAREA       54
  355. #define MENU_VIEW_GIF           55
  356. #define MENU_IBM_TOGGLE         56
  357. #define MENU_PHONE_CHANGE       57
  358. #define MENU_DATAPHONE_CHANGE   58
  359. #define MENU_HANDLE_CHANGE      59
  360. #define MENU_RUN_SDKFILE        60
  361.  
  362. /* Handler modes */
  363. #define HANDLER_SYSOPKEY         6
  364. #define HANDLER_HANGUP           7
  365.  
  366. #define HANDLED     1
  367. #define NOT_HANDLED 0
  368.  
  369. /* Loglevels */
  370. #define LOG_FRIEND     0
  371. #define LOG_NORMAL     1
  372. #define LOG_SUSPICIOUS 2
  373. #define LOG_DANGEROUS  3
  374.  
  375. /**** KEY scan codes ****/
  376. #define KEY_F1   0x3B00U
  377. #define KEY_F2   0x3C00U
  378. #define KEY_F3   0x3D00U
  379. #define KEY_F4   0x3E00U
  380. #define KEY_F5   0x3F00U
  381. #define KEY_F6   0x4000U
  382. #define KEY_F7   0x4100U
  383. #define KEY_F8   0x4200U
  384. #define KEY_F9   0x4300U
  385. #define KEY_F10  0x4400U
  386.  
  387. #define KEY_SF1   0x5400U
  388. #define KEY_SF2   0x5500U
  389. #define KEY_SF3   0x5600U
  390. #define KEY_SF4   0x5700U
  391. #define KEY_SF5   0x5800U
  392. #define KEY_SF6   0x5900U
  393. #define KEY_SF7   0x5A00U
  394. #define KEY_SF8   0x5B00U
  395. #define KEY_SF9   0x5C00U
  396. #define KEY_SF10  0x5D00U
  397.  
  398. #define KEY_CF1   0x5E00U
  399. #define KEY_CF2   0x5F00U
  400. #define KEY_CF3   0x6000U
  401. #define KEY_CF4   0x6100U
  402. #define KEY_CF5   0x6200U
  403. #define KEY_CF6   0x6300U
  404. #define KEY_CF7   0x6400U
  405. #define KEY_CF8   0x6500U
  406. #define KEY_CF9   0x6600U
  407. #define KEY_CF10  0x6700U
  408.  
  409. #define KEY_AF1   0x6800U
  410. #define KEY_AF2   0x6900U
  411. #define KEY_AF3   0x6A00U
  412. #define KEY_AF4   0x6B00U
  413. #define KEY_AF5   0x6C00U
  414. #define KEY_AF6   0x6D00U
  415. #define KEY_AF7   0x6E00U
  416. #define KEY_AF8   0x6F00U
  417. #define KEY_AF9   0x7000U
  418. #define KEY_AF10  0x7100U
  419.  
  420. #define KEY_ALT1 0x7800U
  421. #define KEY_ALT2 0x7900U
  422. #define KEY_ALT3 0x7A00U
  423. #define KEY_ALT4 0x7B00U
  424. #define KEY_ALT5 0x7C00U
  425. #define KEY_ALT6 0x7D00U
  426. #define KEY_ALT7 0x7E00U
  427. #define KEY_ALT8 0x7F00U
  428. #define KEY_ALT9 0x8000U
  429. #define KEY_ALT0 0x8100U
  430.  
  431. #define KEY_ALTA 0x1E00U
  432. #define KEY_ALTB 0x3000U
  433. #define KEY_ALTC 0x2E00U
  434. #define KEY_ALTD 0x2000U
  435. #define KEY_ALTE 0x1200U
  436. #define KEY_ALTF 0x2100U
  437. #define KEY_ALTG 0x2200U
  438. #define KEY_ALTH 0x2300U
  439. #define KEY_ALTI 0x1700U
  440. #define KEY_ALTJ 0x2400U
  441. #define KEY_ALTK 0x2500U
  442. #define KEY_ALTL 0x2600U
  443. #define KEY_ALTM 0x3200U
  444. #define KEY_ALTN 0x3100U
  445. #define KEY_ALTO 0x1800U
  446. #define KEY_ALTP 0x1900U
  447. #define KEY_ALTQ 0x1000U
  448. #define KEY_ALTR 0x1300U
  449. #define KEY_ALTS 0x1F00U
  450. #define KEY_ALTT 0x1400U
  451. #define KEY_ALTU 0x1600U
  452. #define KEY_ALTV 0x2F00U
  453. #define KEY_ALTW 0x1100U
  454. #define KEY_ALTX 0x2D00U
  455. #define KEY_ALTY 0x1500U
  456. #define KEY_ALTZ 0x2C00U
  457.  
  458. #define KEY_CTLA 0x0001U
  459. #define KEY_CTLB 0x0002U
  460. #define KEY_CTLC 0x0003U
  461. #define KEY_CTLD 0x0004U
  462. #define KEY_CTLE 0x0005U
  463. #define KEY_CTLF 0x0006U
  464. #define KEY_CTLG 0x0007U
  465. #define KEY_CTLH 0x0008U
  466. #define KEY_CTLI 0x0009U
  467. #define KEY_CTLJ 0x000AU
  468. #define KEY_CTLK 0x000BU
  469. #define KEY_CTLL 0x000CU
  470. #define KEY_CTLM 0x000DU
  471. #define KEY_CTLN 0x000EU
  472. #define KEY_CTLO 0x000FU
  473. #define KEY_CTLP 0x0010U
  474. #define KEY_CTLQ 0x0011U
  475. #define KEY_CTLR 0x0012U
  476. #define KEY_CTLS 0x0013U
  477. #define KEY_CTLT 0x0014U
  478. #define KEY_CTLU 0x0015U
  479. #define KEY_CTLV 0x0016U
  480. #define KEY_CTLW 0x0017U
  481. #define KEY_CTLX 0x0018U
  482. #define KEY_CTLY 0x0019U
  483. #define KEY_CTLZ 0x001AU
  484.  
  485. #define KEY_DEL  0x5300U
  486. #define KEY_INS  0x5200U
  487. #define KEY_HOME 0x4700U
  488. #define KEY_END  0x4F00U
  489.  
  490. #define KEY_PGUP 0x4900U
  491. #define KEY_PGDN 0x5100U
  492. #define KEY_UP   0x4800U
  493. #define KEY_DN   0x5000U
  494. #define KEY_LT   0x4B00U
  495. #define KEY_RT   0x4D00U
  496.  
  497. #define KEY_ESC  0x001BU
  498. #define KEY_ENT  0x000DU
  499. #define KEY_RET  0x000DU
  500. #define KEY_TAB  0x0009U
  501. #define KEY_STAB 0x0F00U
  502. #define KEY_CPGUP 0x8400U
  503. #define KEY_CPGDN 0x7600U
  504.  
  505.  
  506. /** User flags *******************************************************/
  507. #define UFLAG_DELETED     1    /* User deleted                        */
  508. #define UFLAG_ANSI        2    /* ANSI mode ON                        */
  509. #define UFLAG_PAUSE       4    /* Pause mode ON                       */
  510. #define UFLAG_CLEAR       8    /* Screenclear mode ON                 */
  511. #define UFLAG_STACKING   16    /* Command stacking?                   */
  512. #define UFLAG_NOIBM      32    /* User has no IBM-graphics            */
  513. #define UFLAG_FSED       64    /* Fullscreen editor used              */
  514. #define UFLAG_NOKILL    128    /* Do not kill user                    */
  515. #define UFLAG_IGNORE    256    /* Ignore DL-hours                     */
  516. #define UFLAG_ATTEN     512    /* Attention flag                      */
  517. #define UFLAG_NOTOPS   1024    /* Don't appear in tops                */
  518. #define UFLAG_HIDDEN   2048    /* Hide from lists                     */
  519. #define UFLAG_QUIET    4096    /* Quiet??                             */
  520. #define UFLAG_AVATAR   8192    /* AVT/0 codes                         */
  521. #define UFLAG_AVTPLUS 16384    /* AVT/0+ codes                        */
  522.  
  523. #define MSG_LOCAL   0
  524. #define MSG_NET     1
  525. #define MSG_ECHO    2
  526. #define MSG_PVTECHO 3
  527.  
  528. #define MA_DELETED       1
  529. #define MA_PVT           8
  530. #define MA_RECEIVED     16
  531.  
  532. #define NET_KILL         1
  533. #define NET_SENT         2
  534. #define NET_ATTACH       4
  535. #define NET_CRASH        8
  536.  
  537.  
  538. /**** NOTE *******************************************************************/
  539. /*                                                                           */
  540. /*  Dates are stored as an array of 3 bytes, the first byte is the day       */
  541. /*  portion, the second byte is the month portion, and the third byte is the */
  542. /*  year portion (00-99). Times are stored in a similar way: the first byte  */
  543. /*  is the hour portion (00-24), the second byte is the minute portion       */
  544. /*  (00-59), and the third byte is the seconds portion (00-59).              */
  545. /*                                                                           */
  546. /*****************************************************************************/
  547.  
  548. typedef struct
  549.   {
  550.    char name[36];                  /* User name                              */
  551.    char password[16];              /* Password                               */
  552.    unsigned level;                 /* Security level                         */
  553.    char country[26];               /* Country                                */
  554.    Date birthday;                  /* Birthday                               */
  555.    char telnr[13];                 /* Telephone number                       */
  556.    unsigned timescalled;           /* # times called                         */
  557.    int timeused;                   /* time used today                        */
  558.    unsigned numdownloads;          /* # downloads                            */
  559.    unsigned kdownloaded;           /* K downloaded                           */
  560.    unsigned numuploads;            /* # downloads                            */
  561.    unsigned kuploaded;             /* K downloaded                           */
  562.    unsigned messposted;            /* # messages posted                      */
  563.    Date lastdate;                  /* Date last called                       */
  564.    Time lasttime;                  /* Time last called                       */
  565.    accessflags aflags;             /* Access flags       (A-Z,1-6)           */
  566.    combinedboards boards;          /* Boards connected to (combined boards)  */
  567.    int screenlines;                /* # of lines                             */
  568.    unsigned long uflags;           /* Flags (DELETED/ANSI/PAUSE/...)         */
  569.    int loglevel;                   /* Log level of user                      */
  570.    unsigned lastread[200];         /* Lastread pointers                      */
  571.    long totaltimeused;             /* Total time used (minutes)              */
  572.    Date expir;                     /* Expiration date                        */
  573.    unsigned expirlevel;            /* Fallback level after expiration        */
  574.    char datatelnr[13];             /* Data phone #                           */
  575.    char alias[36];                 /* Fixed alias                            */
  576.    char city[26];                  /* City                                   */
  577.    Date firstdate;                 /* Date of first login                    */
  578.    unsigned todayk;                /* K downloaded today                     */
  579.    unsigned credit;                /* Netmail credit                         */
  580.    int pending;                    /* Netmail pending                        */
  581.    int lastfilearea;               /* Last file area accessed                */
  582.    int lastmsgarea;                /* Last msg area accessed                 */
  583.    char comment[81];               /* Comment                                */
  584.    char forwardto[36];             /* Forward mail to                        */
  585.    int  tb_timebalance;            /* Time balance           (Time Bank)     */
  586.    int  tb_kbytebalance;           /* Kbyte balance          (Time Bank)     */
  587.    int  tb_timewithdrawn;          /* Time withdrawn today   (Time Bank)     */
  588.    int  tb_kbytewithdrawn;         /* Kbytes withdrawn today (Time Bank)     */
  589.    Date tb_lastused;               /* Date last used         (Time Bank)     */
  590.    combinedboards mailcheckboards; /* Areas to check on mail check           */
  591.    int high_msgread;               /* Not really used in ProBoard            */
  592.    byte extra[173];
  593.   } USER_REC;
  594.  
  595. typedef struct
  596.   {
  597.    int      level;            /* User Level                            */
  598.    int      timelimit;        /* Time Limit                            */
  599.    int      daily_klimit;     /* Daily download limit                  */
  600.    int      pre_download;     /* Pre-download time limit               */
  601.    char     id[6];            /* Usergroup ID                          */
  602.    unsigned free;             /* Free upload in Kb.                    */
  603.    byte     factor;           /* Percentage upload required            */
  604.    unsigned max_download;     /* Max download for this level           */
  605.    int      fallto;           /* Fall to level x when max. reached     */
  606.    int      msgfactor;        /* # Kbytes granted per message written  */
  607.    char extra[5];
  608.  } LIMIT;
  609.  
  610. typedef struct
  611.   {
  612.    char name[31];             /* Name of message areas                       */
  613.    char msgtype;              /* Type of messages (Net/Echo/Local)           */
  614.    char msgkind;              /* Kind of messages (Private/Public/...)       */
  615.    char writemode;            /* Msg write mode allowed (Alias/Real Name/...)*/
  616.    int readlevel;             /* Minimum level needed to read msgs           */
  617.    long readflags;            /* flags needed to read msgs                   */
  618.    int writelevel;            /* Minimum level needed to write msgs          */
  619.    long writeflags;           /* flags needed to write msgs                  */
  620.    int sysoplevel;            /* Minimum level needed to change msgs         */
  621.    long sysopflags;           /* flags needed to change msgs                 */
  622.  
  623.    char origin[62];           /* Origin line                                 */
  624.    int aka;                   /* AKA                                         */
  625.  
  626.    int rcv_kill_days;         /* Delete received messages after xx days      */
  627.    int msg_kill_days;         /* Delete all messages after xx days           */
  628.    int max_msgs;              /* Max. # messages in this area                */
  629.  
  630.    char sysop[36];            /* Area Sysop                                  */
  631.    int  replyboard;           /* Reply board number                          */
  632.  
  633.    byte extra[40];
  634.   } MSGAREA;
  635.  
  636. typedef struct
  637.   {
  638.    char name[80];             /* Name of file area                           */
  639.    char listpath[80];         /* Path for file-list                          */
  640.    char filepath[80];         /* Path for files                              */
  641.    int level;                 /* Level needed to access file area            */
  642.    long flags;                /* Flags needed to access file area            */
  643.    bool cdrom;                /* TRUE = CDROM File listing type              */
  644.    int maxfiles;              /* Max files per day in this area downloadable */
  645.    int maxkb;                 /* Max Kbytes per day in this area             */
  646.    bool notops;               /* Set to TRUE if not to appear in TOPFILES.A* */
  647.    bool free;                 /* If TRUE, this area is free                  */
  648.    char extra[13];
  649.   } FILEAREA;
  650.  
  651. typedef struct
  652.   {
  653.    unsigned prevmsg;  /* Previous message in reply chain  */
  654.    unsigned nextmsg;  /* Next message in reply chain      */
  655.    byte postdate[3];  /* Date posted                      */
  656.    byte posttime[3];  /* Time posted                      */
  657.    byte recvdate[3];  /* Date received                    */
  658.    byte recvtime[3];  /* Time received                    */
  659.    int  reserved1[2];
  660.    int cost;
  661.    unsigned msgnum;   /* message number                   */
  662.    byte area;         /* area number                      */
  663.    char from[36];     /* From                             */
  664.    char to[36];       /* To                               */
  665.    char subj[66];     /* Subject                          */
  666.    byte msgflags;     /* Message flags                    */
  667.    byte netflags;     /* Netmail flags                    */
  668.    int orgzone,       /* Origin zone                      */
  669.        orgnet,        /* Origin net                       */
  670.        orgnode,       /* Origin node                      */
  671.        destzone,      /* Destination zone                 */
  672.        destnet,       /* Destination net                  */
  673.        destnode;      /* Destination node                 */
  674.    int reserved2;
  675.   } MESSAGE;
  676.  
  677. typedef struct
  678.   {
  679.    unsigned zone;
  680.    unsigned net;
  681.    unsigned node;
  682.    unsigned point;
  683.   } FIDO_NODE;
  684.  
  685. typedef struct
  686.   {
  687.    char shellmsg[81];         /* Message to show when shelling               */
  688.    char sysopname[36];        /* Name of sysop                               */
  689.    char txtpath[61];          /* Path for textfiles                          */
  690.    char mnupath[61];          /* Path for menu-files                         */
  691.    char msgpath[61];          /* Path for message base                       */
  692.    char uploadpath[61];       /* Uploadpath                                  */
  693.    char editorname[61];       /* Name of external editor                     */
  694.    int newuserlevel;          /* Level for new user                          */
  695.    int newuserloglevel;       /* Loglevel for new user                       */
  696.    long newuserflags;         /* New user flags                              */
  697.    int max_passinput;         /* Maximum attempts for password entry         */
  698.    int min_passlength;        /* Minimum password length                     */
  699.    int inactivity_time;       /* Inactivity time-out limit                   */
  700.    int max_sysop_pages;       /* Maximum times sysop can be paged            */
  701.    int pagebell_length;       /* Length of page-bell (secs)                  */
  702.    int mailcheck;             /* Check for mail at logon?                    */
  703.    int europe;                /* European date format?                       */
  704.    int numnodes;              /* # nodes                                     */
  705.    int allowansi;             /* Allow ANSI?                                 */
  706.    int discrete;              /* Hide sysop activity?                        */
  707.    int askphone;              /* Ask for phone number?                       */
  708.    int allowoneword;          /* Allow one-word names                        */
  709.    int crashlevel;            /* Level needed for crashmail                  */
  710.    long crashflags;           /* Flags needed for crashmail                  */
  711.    int attachlevel;           /* Level needed for file attach                */
  712.    long attachflags;          /* Flags needed for file attach                */
  713.    int allowmsgupload;        /* Allow message uploads                       */
  714.    int allowstacking;         /* Allow command stacking                      */
  715.    byte page_start[3];        /* Paging hours start                          */
  716.    byte page_end[3];          /* Paging hours end                            */
  717.    int handshaking;           /* I/O Handshaking                             */
  718.    int allowalias;            /* Allow alias for login                       */
  719.    int loglocal;              /* Log local calls                             */
  720.    int doswap;                /* Allow swapping                              */
  721.    char originline[61];       /* Origin line                                 */
  722.    char nodelistdir[61];      /* Nodelist directory                          */
  723.    char sysopkeys[10][60];    /* Sysop hotkeys                               */
  724.    byte dl_start[3];          /* Download hours start                        */
  725.    byte dl_end[3];            /* Download hours end                          */
  726.    int uploadspace;           /* Space needed for uploads                    */
  727.    char pvtuploadpath[61];    /* Directory for files uploads                 */
  728.    char quotestring[6];       /* String used for quoting                     */
  729.    int fastmode;              /* Use fast mode (=needs more memory)          */
  730.    int killsent;              /* Kill netmail after sent                     */
  731.    bool egamode;              /* Use 43/50 line mode                         */
  732.    bool showuserinfo;         /* Show user info while in EGA mode?           */
  733.    char pexpath[61];          /* Directory for PEX-files                     */
  734.    int allowquicklogin;       /* Allow quick sysop login?                    */
  735.    int securityboard;         /* MsgBoard for security messages              */
  736.    int pwdmessages;           /* Write security-messages?                    */
  737.    char bbsname[36];          /* Name of the BBS                             */
  738.    char pwdchar;              /* Password character                          */
  739.    int  tb_maxtimedeposit;
  740.    int  tb_maxkbdeposit;
  741.    int  tb_maxtimewithdrawal;
  742.    int  tb_maxkbwithdrawal;
  743.    int  usage_days;           /* Days to keep usage graphs                   */
  744.    char systempwd[16];        /* System password                             */
  745.    bool usesystempwd;         /* Use system password?                        */
  746.    char extra[582];
  747.   } CONFIG;
  748.  
  749.  
  750.  
  751. /***** Long math substitution functions *****/
  752.  
  753. long l_mul(long val1,long val2);
  754. long l_div(long val1,long val2);
  755. long l_mod(long val1,long val2);
  756. long l_shl(long val,unsigned s);
  757. long l_shr(long val,unsigned s);
  758.  
  759. unsigned long ul_div(unsigned long val1,unsigned long val2);
  760. unsigned long ul_mod(unsigned long val1,unsigned long val2);
  761. unsigned long ul_shl(unsigned long val,unsigned s);
  762. unsigned long ul_shr(unsigned long val,unsigned s);
  763.  
  764. #ifdef __cplusplus
  765.  
  766.  inline bool GetFlag(long flags,int flag)
  767.     {
  768.      return ((flags & l_shl(1,31-flag)) ? TRUE:FALSE );
  769.     }
  770.  
  771.  inline void SetFlag(long &flags,int flag)
  772.     {
  773.      flags |= l_shl(1,31-flag);
  774.     }
  775.  
  776.  inline void ClearFlag(long &flags,int flag)
  777.     {
  778.      flags &= ~l_shl(1,31-flag);
  779.     }
  780.  
  781. #else
  782.  
  783.  #define GetFlag(flags,flag)   (((flags) &   l_shl(1,31-(flag)))?TRUE:FALSE)
  784.  #define SetFlag(flags,flag)   { (flags) |=  l_shl(1,31-(flag)); }
  785.  #define ClearFlag(flags,flag) { (flags) &= ~l_shl(1,31-(flag)); }
  786.  
  787. #endif
  788.  
  789. /* You can use these constants to manipulate user flags (by using the */
  790. /* functions/macros GetFlag, SetFlag and ClearFlag                    */
  791.  
  792. #define FLAG_A 1
  793. #define FLAG_B 2
  794. #define FLAG_C 3
  795. #define FLAG_D 4
  796. #define FLAG_E 5
  797. #define FLAG_F 6
  798. #define FLAG_G 7
  799. #define FLAG_H 8
  800. #define FLAG_I 9
  801. #define FLAG_J 10
  802. #define FLAG_K 11
  803. #define FLAG_L 12
  804. #define FLAG_M 13
  805. #define FLAG_N 14
  806. #define FLAG_O 15
  807. #define FLAG_P 16
  808. #define FLAG_Q 17
  809. #define FLAG_R 18
  810. #define FLAG_S 19
  811. #define FLAG_T 20
  812. #define FLAG_U 21
  813. #define FLAG_V 22
  814. #define FLAG_W 23
  815. #define FLAG_X 24
  816. #define FLAG_Y 25
  817. #define FLAG_Z 26
  818. #define FLAG_1 27
  819. #define FLAG_2 28
  820. #define FLAG_3 29
  821. #define FLAG_4 30
  822. #define FLAG_5 31
  823. #define FLAG_6 32
  824.  
  825. /*****************************************************************************/
  826. /****  Global ProBoard variables  ********************************************/
  827. /*****************************************************************************/
  828.  
  829. extern USER_REC     * const CurUser;      /* Current user online        (R/W) */
  830. extern int            const UserRecNr;    /* Record # of current user   (R/O) */
  831. extern int            const NumLimits;    /* # limits in limits[] array (R/O) */
  832. extern LIMIT  const * const Limits;       /* Limits per level           (R/O) */
  833. extern char         * const LoginDate;    /* Login date of user         (R/W) */
  834. extern char         * const LoginTime;    /* Login time of user         (R/W) */
  835. extern bool           const NetEntered;   /* Netmail entered            (R/W) */
  836. extern bool           const EchoEntered;  /* Echomail entered           (R/W) */
  837. extern int            const NumUsers;     /* # users in userfile        (R/O) */
  838. extern int            const NodeNumber;   /* Current node number        (R/O) */
  839. extern char   const * const CurMenu;      /* Current menu name          (R/O) */
  840. extern char   const * const UserFirstName;/* First name of current user (R/O) */
  841. extern char   const * const PrevUser;     /* Name of previous user      (R/O) */
  842. extern char   const * const StartupPath;  /* Startup path               (R/O) */
  843. extern char   const * const SysPath;      /* ProBoard system path       (R/O) */
  844. extern CONFIG const * const Config;       /* ProBoard config-record     (R/O) */
  845.  
  846.  
  847. char *form(char *, ...);                         /* From old C++ streams lib */
  848.  
  849.  
  850. /*****************************************************************************/
  851. /****  Message functions  ****************************************************/
  852. /*****************************************************************************/
  853.  
  854. void MsgEd(void);
  855. int  PostMessage(const char *from,const char *to,const char *subject,int area,bool pvt);
  856. int  PostNetmail(const char *from,const char *to,const char *subject,int area,const FIDO_NODE *address,bool attach,bool crash,bool kill);
  857. int  ReadMsgArea(int area,MSGAREA *ma);
  858. int  ReadMessage(MESSAGE *msg,int msgnum);
  859. void WriteMSGTMP(const char *text);
  860. void AppendMSGTMP(const char *text);
  861. void ShowMessage(const MESSAGE *msg);
  862. void CreateMessageText(const MESSAGE *msg);
  863. void CreateMessageTextString(const MESSAGE *msg,char *text,int maxsize);
  864. int  FirstMessage(MESSAGE *msg,int area,int order,int first);
  865. int  NextMessage(MESSAGE *msg,int area,int order);
  866. int  DeleteMessage(MESSAGE *msg);
  867. void MarkMessage(int msgnum);
  868. void ReadMarkedMessages(void);
  869. void ListMarkedMessages(void);
  870. void UnMarkAllMessages(void);
  871.  
  872.  
  873. /*****************************************************************************/
  874. /****  Time functions  *******************************************************/
  875. /*****************************************************************************/
  876.  
  877. void AddTime(int plusminus);
  878. int  TimeLeft(void);
  879. int  TimeOnline(void);
  880. void SuspendTimer(void);
  881. void RestartTimer(void);
  882. void AdjustTime(void);
  883.  
  884.  
  885. /*****************************************************************************/
  886. /****  Low-level I/O functions  **********************************************/
  887. /*****************************************************************************/
  888.  
  889. bool IO_SendByte(byte);         /* TRUE = byte sent, FALSE = buffer full */
  890. int  IO_ReadByte(void);         /* Returns -1 if no byte available       */
  891. bool IO_Carrier(void);          /* TRUE = carrier available              */
  892. bool IO_ByteReady(void);        /* TRUE = byte available in input buffer */
  893. bool IO_BufEmpty(void);         /* TRUE = output buffer is empty         */
  894. void IO_StartBreak(void);       /* Start sending a break                 */
  895. void IO_StopBreak(void);        /* Stop sending a break                  */
  896. void IO_DTR(bool);              /* Set/lower DTR line (TRUE = set)       */
  897.  
  898. /*****************************************************************************/
  899. /****  I/O functions  ********************************************************/
  900. /*****************************************************************************/
  901. /* Note : some I/O is done through the standard library functions printf(),
  902.  *        puts(), putchar(), getchar(), gets() and vprintf()
  903.  *****************************************************************************/
  904.  
  905. char WaitKey(void);
  906. char WaitKeys(const char *);
  907. void Input(char *buf,int len,int readmode);
  908. bool Ask(bool def);
  909. char PeekChar(void);
  910. void SetColor(char color);
  911. void SetFullColor(byte color);
  912. void GotoXY(int x,int y);
  913. void ClrEol(void);
  914. void EnableStop(void);
  915. void DisableStop(void);
  916. bool Stopped(void);
  917. bool ExternalInput(void);
  918. char ShowHotkeyFile(const char *fname,const char *hotkeys);
  919. char ShowHotkeyANSIFile(const char *fname,const char *hotkeys);
  920. void InitLineCounter(void);
  921. bool LineCounter(void);
  922.  
  923. int  FuzzySearch(char *text,char *search,int degree);
  924.  
  925. int  ReadUser(USER_REC *rec,int recnr);
  926. void WriteUser(const USER_REC *rec,int recnr);
  927. char PlayMusic(const char *fname,const char *hotkeys);
  928. void PostInfo(const char *fname);
  929. int  ReadFileArea(int area,FILEAREA *ma);
  930. long MemAvail(void);
  931. void MenuFunction(int,const char *);
  932. void Log(int loglevel,const char *fmtstring,...);
  933. void HangUp(void);
  934. bool CheckAccess(int level,long flags);
  935. KEY  ScanKey(void);
  936. void exit(void);
  937. void ExitTSR(void);
  938. int  ErrorLevel(void);
  939.  
  940. bool GetIniVar(char *fname,char *varname,char *value,int max);
  941. bool SetIniVar(char *fname,char *varname,char *value);
  942.  
  943. int  _InstallHandler(int handler,int (*func)(void),unsigned ds);
  944. int  RemoveHandler(int handler);
  945. #define InstallHandler(handler,func) _InstallHandler(handler,(int (*)(void))(func),FP_SEG(&NetEntered));
  946.  
  947. #ifdef __cplusplus
  948.  }
  949.  
  950. inline void * operator new   (unsigned size)    { return malloc(size); }
  951. inline void   operator delete(void *p)          { free(p); }
  952.  
  953. #endif
  954.