home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / PPPBCKP / SRC / SRC15B55.ZIP / VARDEC.H < prev    next >
C/C++ Source or Header  |  1996-08-11  |  39KB  |  1,284 lines

  1. /*****************************************************************************
  2.  
  3.                 WWIV Version 4
  4.                     Copyright (C) 1988-1995 by Wayne Bell
  5.  
  6. Distribution of the source code for WWIV, in any form, modified or unmodified,
  7. without PRIOR, WRITTEN APPROVAL by the author, is expressly prohibited.
  8. Distribution of compiled versions of WWIV is limited to copies compiled BY
  9. THE AUTHOR.  Distribution of any copies of WWIV not compiled by the author
  10. is expressly prohibited.
  11.  
  12.  
  13. *****************************************************************************/
  14.  
  15.  
  16. #ifndef _VARDEC_H_
  17. #define _VARDEC_H_
  18.  
  19. #ifndef __OS2__
  20. #define RIPDRIVE
  21. #endif
  22.  
  23.  
  24. #define OK_LEVEL 0
  25. #define NOK_LEVEL 1
  26. #define QUIT_LEVEL 2
  27. #define EVENT_LEVEL 4
  28.  
  29. #define DELIMS_NORMAL " ;.!:-?,\t\r\n"
  30. #define DELIMS_WHITE  " \t\r\n"
  31.  
  32. typedef struct {
  33.         short
  34.           number,
  35.           user;
  36.         unsigned short
  37.           flags,
  38.           loc,
  39.           subloc;
  40.         unsigned long last_update;
  41.         unsigned short modem_speed;
  42.         unsigned char
  43.           extra[84];
  44. } instancerec;
  45.  
  46. /* Instance status flags */
  47. #define INST_FLAGS_NONE      0x0000  /* No flags at all */
  48. #define INST_FLAGS_ONLINE    0x0001  /* User online */
  49. #define INST_FLAGS_MSG_AVAIL 0x0002  /* Available for inst msgs */
  50.  
  51. /* Instance primary location points */
  52. #define INST_LOC_DOWN          0
  53. #define INST_LOC_INIT          1
  54. #define INST_LOC_EMAIL         2
  55. #define INST_LOC_MAIN          3
  56. #define INST_LOC_XFER          4
  57. #define INST_LOC_CHAINS        5
  58. #define INST_LOC_NET           6
  59. #define INST_LOC_GFILES        7
  60. #define INST_LOC_BEGINDAY      8
  61. #define INST_LOC_EVENT         9
  62. #define INST_LOC_CHAT         10
  63. #define INST_LOC_CHAT2        11
  64. #define INST_LOC_CHATROOM     12
  65. #define INST_LOC_LOGON        13
  66. #define INST_LOC_LOGOFF       14
  67. #define INST_LOC_FSED         15
  68. #define INST_LOC_UEDIT        16
  69. #define INST_LOC_CHAINEDIT    17
  70. #define INST_LOC_BOARDEDIT    18
  71. #define INST_LOC_DIREDIT      19
  72. #define INST_LOC_GFILEEDIT    20
  73. #define INST_LOC_CONFEDIT     21
  74. #define INST_LOC_DOS          22
  75. #define INST_LOC_DEFAULTS     23
  76. #define INST_LOC_REBOOT       24
  77. #define INST_LOC_RELOAD       25
  78. #define INST_LOC_VOTE         26
  79. #define INST_LOC_BANK         27
  80. #define INST_LOC_AMSG         28
  81. #define INST_LOC_SUBS         29
  82. #define INST_LOC_CHUSER       30
  83. #define INST_LOC_TEDIT        31
  84. #define INST_LOC_MAILR        32
  85. #define INST_LOC_RESETQSCAN   33
  86. #define INST_LOC_VOTEEDIT     34
  87. #define INST_LOC_VOTEPRINT    35
  88. #define INST_LOC_RESETF       36
  89. #define INST_LOC_FEEDBACK     37
  90. #define INST_LOC_KILLEMAIL    38
  91. #define INST_LOC_POST         39
  92. #define INST_LOC_NEWUSER      40
  93. #define INST_LOC_RMAIL        41
  94. #define INST_LOC_DOWNLOAD     42
  95. #define INST_LOC_UPLOAD       43
  96. #define INST_LOC_BIXFER       44
  97. #define INST_LOC_NETLIST      45
  98. #define INST_LOC_TERM         46
  99. #define INST_LOC_QWK          47
  100. #define INST_LOC_GETUSER      48
  101. #define INST_LOC_WFC       65535
  102.  
  103. /* DATA FOR EVERY USER */
  104. typedef struct {
  105.  
  106.     unsigned char
  107.       name[31],       /* user's name/handle */
  108.       realname[21],   /* user's real name */
  109.       callsign[7],    /* user's amateur callsign */
  110.       phone[13],      /* user's phone number */
  111.       dataphone[13],  /* user's data phone */
  112.       street[31],     /* street address */
  113.       city[31],       /* city */
  114.       state[3],       /* state code [MO, CA, etc] */
  115.       country1[4],    /* country [USA, CAN, FRA, etc] */
  116.       zipcode[11],    /* zipcode [#####-####] */
  117.       pw[9],          /* user's password */
  118.       laston[9],      /* last date on */
  119.       firston[9],     /* first date on */
  120.       note[61],       /* sysop's note about user */
  121.       macros[3][81],  /* macro keys */
  122.       sex;            /* user's sex */
  123.  
  124.     char
  125.       res_char[78];   /* bytes for more strings */
  126.  
  127.     unsigned char
  128.       age,            /* user's age */
  129.       inact,          /* if deleted or inactive */
  130.       comp_type,      /* computer type */
  131.       defprot,        /* deflt transfer protocol */
  132.       defed,          /* default editor */
  133.       screenchars,    /* screen width */
  134.       screenlines,    /* screen height */
  135.       num_extended,   /* extended description lines */
  136.       optional_val,   /* optional lines in msgs */
  137.       sl,             /* security level */
  138.       dsl,            /* transfer security level */
  139.       exempt,         /* exempt from ratios, etc */
  140.       colors[10],     /* user's colors */
  141.       bwcolors[10],   /* user's b&w colors */
  142.       votes[20],      /* user's votes */
  143.       illegal,        /* illegal logons */
  144.       waiting,        /* number mail waiting */
  145.       ontoday,        /* num times on today */
  146.       month,          /* birth month */
  147.       day,            /* birth day */
  148.       year,           /* birth year */
  149.       language,       /* language to use */
  150.       cbv;            /* called back */
  151.  
  152.     char
  153.       res_byte[49];   /* reserved for byte values */
  154.  
  155.     unsigned short
  156.       homeuser,       /* user number where user can be found */
  157.       homesys,        /* system where user can be found */
  158.       forwardusr,     /* mail forwarded to this user number */
  159.       forwardsys,     /* mail forwarded to this system number */
  160.       net_num,        /* net num for forwarding */
  161.       msgpost,        /* number messages posted */
  162.       emailsent,      /* number of email sent */
  163.       feedbacksent,   /* number of f-back sent */
  164.       fsenttoday1,    /* feedbacks today */
  165.       posttoday,      /* number posts today */
  166.       etoday,         /* number emails today */
  167.       ar,             /* board access */
  168.       dar,            /* directory access */
  169.       restrict,       /* restrictions on account */
  170.       ass_pts,        /* bad things the user did */
  171.       uploaded,       /* number files uploaded */
  172.       downloaded,     /* number files downloaded */
  173.       lastrate,       /* last baud rate on */
  174.       logons,         /* total number of logons */
  175.       emailnet,       /* email sent via net */
  176.       postnet,        /* posts sent thru net */
  177.       deletedposts,   /* how many posts deleted */
  178.       chainsrun,      /* how many "chains" run */
  179.       gfilesread,     /* how many gfiles read */
  180.       banktime,       /* how many mins in timebank */
  181.       homenet;        /* home net number */
  182.  
  183.    char
  184.      res_short[48];   /* reserved for short values */
  185.  
  186.     unsigned long
  187.       msgread,        /* total num msgs read */
  188.       uk,             /* number of k uploaded */
  189.       dk,             /* number of k downloaded */
  190.       daten,          /* numerical time last on */
  191.       sysstatus,      /* status/defaults */
  192.       wwiv_regnum,    /* user's WWIV reg number */
  193.       filepoints,     /* points to spend for files */
  194.       registered,     /* numerical registration date */
  195.       expires;        /* numerical expiration date */
  196.  
  197.     char
  198.       res_long[48];   /* reserved for long values */
  199.  
  200.     float
  201.       timeontoday,    /* time on today */
  202.       extratime,      /* time left today */
  203.       timeon,         /* total time on system */
  204.       pos_account,    /* $ credit */
  205.       neg_account,    /* $ debit */
  206.       gold;           /* game money */
  207.  
  208.     char
  209.       res_float[32];  /* reserved for real values */
  210.  
  211.     char
  212.       res_gp[94];    /* reserved for whatever */
  213.  
  214.     unsigned int qwk_max_msgs;
  215.     unsigned int qwk_max_msgs_per_sub;
  216.  
  217.     unsigned int qwk_dont_scan_mail : 1;
  218.     unsigned int qwk_delete_mail : 1;
  219.     unsigned int qwk_dontsetnscan : 1;
  220.     unsigned int qwk_remove_color : 1;
  221.     unsigned int qwk_convert_color : 1;
  222.     unsigned int qwk_archive : 3;
  223.  
  224.     unsigned int qwk_leave_bulletin : 1;
  225.     unsigned int qwk_dontscanfiles : 1;
  226.     unsigned int qwk_keep_routing : 1;
  227.     unsigned int                  : 1;
  228.     unsigned int qwk_protocol : 4;
  229.  
  230. } userrec;
  231.  
  232.  
  233. /* SECLEV DATA FOR 1 SL */
  234. typedef struct {
  235.     unsigned short    time_per_day,        /* time allowed on per day */
  236.             time_per_logon,        /* time allowed on per logon */
  237.             messages_read,        /* messages allowed to read */
  238.             emails,            /* number emails allowed */
  239.             posts;            /* number posts allowed */
  240.     unsigned long    ability;        /* bit mapped abilities */
  241. } slrec;
  242.  
  243.  
  244. /* AUTO-VALIDATION DATA */
  245. typedef struct {
  246.     unsigned char    sl,            /* SL */
  247.             dsl;            /* DSL */
  248.     unsigned short    ar,            /* AR */
  249.             dar,            /* DAR */
  250.             restrict;        /* restrictions */
  251. } valrec;
  252.  
  253. typedef struct {
  254.         char            extension[4],           /* extension for archive */
  255.                         arca[32],
  256.                         arce[32],
  257.                         arcl[32];
  258. } arcrec;
  259.  
  260.  
  261. /* STATIC SYSTEM INFORMATION */
  262. typedef struct {
  263.     char        newuserpw[21],        /* new user password */
  264.             systempw[21],        /* system password */
  265.             msgsdir[81],        /* path for msgs directory */
  266.             gfilesdir[81],        /* path for gfiles dir */
  267.             datadir[81],        /* path for data directory */
  268.             dloadsdir[81],        /* path for dloads dir */
  269.             ramdrive,        /* drive for ramdisk */
  270.             tempdir[81],        /* path for temporary directory */
  271.                         xmark,                  /* 0xff */
  272.                         regcode[83],            /* registration code */
  273.             bbs_init_modem[51],    /* modem initialization cmd */
  274.             answer[21],        /* modem answer cmd */
  275.             connect_300[21],    /* modem responses for */
  276.             connect_1200[21],    /* connections made at */
  277.             connect_2400[21],    /* various speeds */
  278.             connect_9600[21],
  279.             connect_19200[21],
  280.             no_carrier[21],        /* modem disconnect */
  281.             ring[21],        /* modem ring */
  282.             terminal[21],        /* DOS cmd for run term prg */
  283.             systemname[51],        /* BBS system name */
  284.             systemphone[13],    /* BBS system phone number */
  285.             sysopname[51],        /* sysop's name */
  286.             executestr[51];        /* mail route path name */
  287.     unsigned char    newusersl,        /* new user SL */
  288.             newuserdsl,        /* new user DSL */
  289.             maxwaiting,        /* max mail waiting */
  290.             comport[5],        /* what connected to comm */
  291.             com_ISR[5],        /* Com Interrupts */
  292.             primaryport,        /* primary comm port */
  293.             newuploads,        /* file dir new uploads go */
  294.             closedsystem;        /* if system is closed */
  295.     unsigned short    systemnumber,        /* BBS system number */
  296.             baudrate[5],        /* Baud rate for com ports */
  297.             com_base[5],        /* Com base addresses */
  298.             maxusers,        /* max users on system */
  299.             newuser_restrict,    /* new user restrictions */
  300.             sysconfig,        /* System configuration */
  301.             sysoplowtime,        /* Chat time on */
  302.             sysophightime,        /* Chat time off */
  303.             executetime;        /* time to run mail router */
  304.     float        req_ratio,        /* required up/down ratio */
  305.             newusergold;        /* new user gold */
  306.     slrec        sl[256];        /* security level data */
  307.     valrec        autoval[10];        /* sysop quik-validation data*/
  308.     char        hangupphone[21],    /* string to hang up phone */
  309.             pickupphone[21];    /* string to pick up phone */
  310.         unsigned short  netlowtime,             /* net time on */
  311.             nethightime;        /* net time off */
  312.     char            connect_300_a[21],    /* alternate connect str's */
  313.             connect_1200_a[21],
  314.             connect_2400_a[21],
  315.             connect_9600_a[21],
  316.             connect_19200_a[21];
  317.         arcrec          arcs[4];
  318.         char            beginday_c[51],
  319.                         logon_c[51];
  320.         short           userreclen,
  321.                         waitingoffset,
  322.                         inactoffset;
  323.         char            newuser_c[51];
  324.         unsigned long   wwiv_reg_number;
  325.         char            dial_prefix[21];
  326.         float           post_call_ratio;
  327.         char            upload_c[51];
  328.         char            dszbatchdl[81];
  329.         char            modem_type[9];
  330.         char            batchdir[81];
  331.         short           sysstatusoffset;
  332.         char            network_type;
  333.         short           fuoffset,
  334.                         fsoffset,
  335.                         fnoffset;
  336.         unsigned short  max_subs,
  337.                         max_dirs,
  338.                         qscn_len;
  339.         unsigned char   email_storage_type;
  340.         unsigned long   sysconfig1;
  341.         char            res[19];               /* RESERVED */
  342. } configrec;
  343.  
  344.  
  345. /* overlay information per instance */
  346. typedef struct {
  347.         unsigned char   com_ISR[9],
  348.                         primaryport;
  349.         unsigned short  com_base[9];
  350.         char            modem_type[9],
  351.                         tempdir[81],
  352.                         batchdir[81];
  353.         unsigned short  comflags;
  354.         char            bootdrive;
  355.         char            res[310];
  356. } configoverrec;
  357.  
  358.  
  359. /* DYNAMIC SYSTEM STATUS */
  360. typedef struct {
  361.     char        date1[9],        /* last date active */
  362.             date2[9],        /* date before now */
  363.             date3[9],        /* two days ago */
  364.             log1[13],        /* yesterday's log */
  365.             log2[13],        /* two days ago log */
  366.             gfiledate[9],        /* date gfiles last updated */
  367.                         filechange[7];          /* flags for files changing */
  368.     unsigned short
  369.                         localposts,             /* how many local posts today */
  370.                         users,                  /* Current number of users */
  371.             callernum,        /* Current caller number */
  372.             callstoday,        /* Number of calls today */
  373.                         msgposttoday,           /* Messages posted today*/
  374.             emailtoday,        /* Email sent today */
  375.             fbacktoday,        /* Feedback sent today */
  376.             uptoday,        /* files uploaded today */
  377.             activetoday;        /* Minutes active today */
  378.     unsigned long    qscanptr;        /* Q-scan pointer value */
  379.     char        amsganon;        /* auto-message anony stat */
  380.     unsigned short    amsguser;        /* user who wrote a-msg */
  381.     unsigned long    callernum1;        /* caller number */
  382.         unsigned short  net_edit_stuff;         /* word for net editor */
  383.         unsigned short  wwiv_version;           /* tell what version it is */
  384.         unsigned short  net_version;            /* tell what version of net */
  385.         float           net_bias;               /* network bias factor */
  386.         long            last_connect,           /* date last connect.net */
  387.                         last_bbslist;           /* date last bbslist.net */
  388.         float           net_req_free;           /* net free factor def 3 */
  389.         unsigned short  days;                   /* # days BBS active */
  390.         char            res[29];                /* RESERVED */
  391. } statusrec;
  392.  
  393.  
  394.  
  395. /* MESSAGE BASE INFORMATION */
  396. typedef struct {
  397.     char        name[41],        /* board name */
  398.             filename[9],        /* board database filename */
  399.             key;            /* board special key */
  400.     unsigned char    readsl,            /* sl required to read */
  401.             postsl,            /* sl required to post */
  402.             anony,            /* anonymous board? */
  403.             age;            /* minimum age for sub */
  404.     unsigned short    maxmsgs,        /* max # of msgs */
  405.             ar,            /* AR for sub-board */
  406.             storage_type,        /* how messages are stored */
  407.             type;            /* 4 digit board type */
  408. } subboardrec;
  409.  
  410.  
  411.  
  412. /* UPLOAD DIRECTORY INFORMATION */
  413. typedef struct {
  414.     char        name[41],        /* directory name */
  415.             filename[9],        /* direct database filename */
  416.             path[81];        /* filename path */
  417.     unsigned char    dsl,            /* DSL for directory */
  418.             age;            /* minimum age for directory */
  419.     unsigned short    dar,            /* DAR for directory */
  420.             maxfiles,        /* max files for directory */
  421.             mask,            /* file type mask */
  422.             type;            /* 4 digit directory type */
  423. } directoryrec;
  424.  
  425.  
  426.  
  427. /* QUICK REFERNCE TO FIND USER NUMBER FROM NAME */
  428. typedef struct {
  429.   unsigned char name[31];
  430.   unsigned short number;
  431. } smalrec;
  432.  
  433.  
  434.  
  435. /* TYPE TO TELL WHERE A MESSAGE IS STORED */
  436. typedef struct {
  437.     unsigned char    storage_type;        /* how it is stored */
  438.     unsigned long    stored_as;        /* where it is stored */
  439. } messagerec;
  440.  
  441. /* MODIFIED MESSAGEREC FOR RIP MENUS */
  442. typedef struct {
  443.     unsigned char   storage_type;       /* how it is stored */
  444.     unsigned long   stored_as;      /* where it is stored */
  445.     unsigned int    menu_num;
  446. } ripmsgrec;
  447.  
  448.  
  449. /* DATA HELD FOR EVERY POST */
  450. typedef struct {
  451.     char        title[81];        /* title of post */
  452.     unsigned char    anony,            /* anony-stat of message */
  453.             status;            /* bit-mapped status */
  454.     unsigned short    ownersys,owneruser;    /* who posted it */
  455.     unsigned long    qscan,            /* qscan pointer */
  456.             daten;            /* numerical date posted */
  457.     messagerec    msg;            /* where to find it */
  458. } postrec;
  459.  
  460.  
  461.  
  462. /* DATA HELD FOR EVERY E-MAIL OR F-BACK */
  463. typedef struct {
  464.     char        title[81];        /* E-mail title */
  465.     unsigned char    anony,            /* anonymous mail? */
  466.             status;            /* status for e-mail */
  467.     unsigned short    fromsys,fromuser,    /* originating system,user */
  468.             tosys,touser;        /* destination system,user */
  469.     unsigned long    daten;            /* date it was sent */
  470.     messagerec    msg;            /* where to find it */
  471. } mailrec;
  472.  
  473. /* USED IN READMAIL TO STORE EMAIL INFO */
  474. typedef struct {
  475.         short           index;                  /* index into email.dat */
  476.         unsigned short  fromsys,fromuser;       /* originating system,user */
  477.     unsigned long    daten;            /* date it was sent */
  478.     messagerec    msg;            /* where to find it */
  479. } tmpmailrec;
  480.  
  481.  
  482. /* SHORT RESPONSE FOR USER, TELLING HIS MAIL HAS BEEN READ */
  483. typedef struct {
  484.     char        message[81];        /* short message to user */
  485.     unsigned short    tosys,touser;        /* who it is to */
  486. } shortmsgrec;
  487.  
  488.  
  489.  
  490. /* VOTING RESPONSE DATA */
  491. typedef struct {
  492.     char        response[81];        /* Voting question response */
  493.     unsigned short    numresponses;        /* number of responses */
  494. } voting_response;
  495.  
  496.  
  497.  
  498. /* VOTING DATA INFORMATION */
  499. typedef struct {
  500.     char        question[81];        /* Question */
  501.     unsigned char    numanswers;        /* number of responses */
  502.     voting_response    responses[20];        /* actual responses */
  503. } votingrec;
  504.  
  505.  
  506.  
  507. /* DATA HELD FOR EVERY UPLOAD */
  508. typedef struct {
  509.     char        filename[13],        /* filename */
  510.             description[59],    /* file description */
  511.             date[9],        /* date u/l'ed */
  512.             upby[37],               /* name of upload user */
  513.             lastdate[9];            /* Date last accessed */
  514.   unsigned char   filetype;       /* file type for apples */
  515.     unsigned short    numdloads,        /* number times d/l'ed */
  516.             ownersys,ownerusr,    /* who uploaded it */
  517.             mask;            /* file type mask */
  518.     unsigned long    daten,            /* date uploaded */
  519.             numbytes;        /* number bytes long file is */
  520. } uploadsrec;
  521.  
  522.  
  523. typedef struct {
  524.         uploadsrec      u;                      /* file information */
  525.         short           directory;              /* directory number */
  526.         unsigned short  dir_mask;               /* directory mask */
  527. } tagrec;
  528.  
  529.  
  530. /* ZLOG INFORMATION FOR PAST SYSTEM USAGE */
  531. typedef struct {
  532.     char        date[9];        /* zlog for what date */
  533.     unsigned short    active,            /* number minutes active */
  534.             calls,            /* number calls */
  535.             posts,            /* number posts */
  536.             email,            /* number e-mail */
  537.             fback,            /* number f-back */
  538.             up;            /* number uploads */
  539. } zlogrec;
  540.  
  541.  
  542.  
  543. /* DATA FOR OTHER PROGRAMS AVAILABLE */
  544. typedef struct {
  545.     char        filename[81],        /* filename for .chn file */
  546.             description[81];    /* description of it */
  547.     unsigned char    sl,            /* seclev restriction */
  548.             ansir;            /* if ANSI required */
  549.     unsigned short    ar;            /* AR restriction */
  550. } chainfilerec;
  551.  
  552.  
  553. typedef struct {
  554.         int             regby[5],               /* who registered */
  555.                         usage;                  /* number of runs */
  556.         unsigned char   minage,                 /* minimum age necessary */
  557.                         maxage;                 /* maximum age allowed */
  558.         char            space[50];              /* reserved space */
  559. } chainregrec;
  560.  
  561.  
  562. /* DATA FOR EXTERNAL PROTOCOLS */
  563. typedef struct {
  564.     char        description[81],    /* protocol description */
  565.             receivefn[81],        /* receive filename */
  566.             sendfn[81];        /* send filename */
  567.     unsigned short    ok1,ok2,        /* if sent */
  568.             nok1,nok2;        /* if not sent */
  569. } externalrec;
  570.  
  571. typedef struct {
  572.     char        description[81],    /* protocol description */
  573.             receivefn[81],        /* receive filename */
  574.                         sendfn[81],             /* send filename */
  575.                         receivebatchfn[81],     /* batch receive cmd */
  576.                         sendbatchfn[81],        /* batch send cmd */
  577.                         bibatchfn[81];          /* batch send/receive cmd */
  578.         unsigned short  ok1;                    /* if sent */
  579.         unsigned short  othr;                   /* other flags */
  580.         char            pad[22];
  581. } newexternalrec;
  582.  
  583.  
  584. /* DATA FOR EXTERNAL EDITORS */
  585. typedef struct {
  586.     char        description[81],    /* description of editor */
  587.             filename[81];        /* how to run the editor */
  588.     unsigned long    config;            /* configuration for editor */
  589.         char        filenamecon[81];    /* how to run locally */
  590.     char        res[119];
  591. } editorrec;
  592.  
  593.  
  594.  
  595. /* DATA FOR CONVERSION OF MAIN MENU KEYS TO SUB-BOARD NUMBERS */
  596. typedef struct {
  597.         char            keys[5];
  598.         short           subnum;
  599. } usersubrec;
  600.  
  601.  
  602. typedef struct {
  603.         short           confnum;
  604. } userconfrec;
  605.  
  606.  
  607. typedef struct {
  608.         char            sending;
  609.         char            filename[13];
  610.         short           dir;
  611.         float           time;
  612.         long            len;
  613. } batchrec;
  614.  
  615.  
  616. typedef enum {
  617.   xf_up, xf_down, xf_up_temp, xf_down_temp, xf_up_batch, xf_down_batch, xf_bi, xf_none
  618. } xfertype;
  619.  
  620. /* userrec.inact */
  621. #define inact_deleted  0x01
  622. #define inact_inactive 0x02
  623.  
  624. /* userrec.exempt */
  625. #define exempt_ratio 0x01
  626. #define exempt_time  0x02
  627. #define exempt_all   0x04
  628. #define exempt_post  0x08
  629.  
  630. /* userrec.restrict */
  631. #define restrict_logon           0x0001
  632. #define restrict_chat            0x0002
  633. #define restrict_validate        0x0004
  634. #define restrict_automessage     0x0008
  635. #define restrict_anony           0x0010
  636. #define restrict_post            0x0020
  637. #define restrict_email           0x0040
  638. #define restrict_vote            0x0080
  639. #define restrict_iichat          0x0100
  640. #define restrict_net             0x0200
  641. #define restrict_upload          0x0400
  642.  
  643. #define restrict_string "LCMA*PEVKNU     "
  644.  
  645. /* userrec.sysstatus */
  646. #define sysstatus_ansi              0x00000001
  647. #define sysstatus_color             0x00000002
  648. #define sysstatus_music             0x00000004
  649. #define sysstatus_pause_on_page     0x00000008
  650. #define sysstatus_expert            0x00000010
  651. #define sysstatus_smw               0x00000020
  652. #define sysstatus_full_screen       0x00000040
  653. #define sysstatus_nscan_file_system 0x00000080
  654. #define sysstatus_extra_color       0x00000100
  655. #define sysstatus_clr_scrn          0x00000200
  656. #define sysstatus_upper_ASCII       0x00000400
  657. #define sysstatus_no_tag            0x00001000
  658. #define sysstatus_conference        0x00002000
  659. #define sysstatus_nochat            0x00004000
  660. #define sysstatus_rip               0x00008000
  661. #define sysstatus_no_msgs           0x00010000
  662. #define sysstatus_menusys           0x00020000
  663. #define sysstatus_listplus          0x00040000
  664. #define sysstatus_disable_rip       0x00080000
  665. #define sysstatus_splitmenus        0x00100000
  666.  
  667. /* slrec.ability */
  668. #define ability_post_anony       0x0001
  669. #define ability_email_anony      0x0002
  670. #define ability_read_post_anony  0x0004
  671. #define ability_read_email_anony 0x0008
  672. #define ability_limited_cosysop  0x0010
  673. #define ability_cosysop          0x0020
  674. #define ability_val_net          0x0040
  675.  
  676. /* subboardrec.anony */
  677. #define anony_enable_anony     0x01
  678. #define anony_enable_dear_abby 0x02
  679. #define anony_force_anony      0x04
  680. #define anony_real_name        0x08
  681. #define anony_val_net          0x10
  682. #define anony_ansi_only        0x20
  683. #define anony_no_tag           0x40
  684. #define anony_require_sv       0x80
  685.  
  686. /* postrec.anony, mailrec.anony */
  687. #define anony_sender      0x01
  688. #define anony_sender_da   0x02
  689. #define anony_sender_pp   0x03
  690. #define anony_receiver    0x10
  691. #define anony_receiver_da 0x20
  692. #define anony_receiver_pp 0x30
  693.  
  694. /* directoryrec.mask */
  695. #define mask_PD            0x0001
  696. #define mask_no_uploads    0x0004
  697. #define mask_archive       0x0008
  698. #define mask_pending_batch 0x0010
  699. #define mask_no_ratio      0x0020
  700. #define mask_cdrom         0x0040
  701. #define mask_offline       0x0080
  702. #define mask_guest         0x4000
  703. #define mask_extended      0x8000
  704.  
  705. /* postrec.status */
  706. #define status_unvalidated          0x01
  707. #define status_delete               0x02
  708. #define status_no_delete            0x04
  709. #define status_pending_net          0x08
  710. #define status_post_source_verified 0x10
  711. #define status_post_new_net         0x20
  712.  
  713. /* mailrec.status */
  714. #define status_multimail       0x01
  715. #define status_source_verified 0x02
  716. #define status_new_net         0x04
  717. #define status_seen            0x08
  718. #define status_replied         0x10
  719. #define status_file            0x80
  720.  
  721. /* configrec.sysconfig */
  722. #define sysconfig_no_local      0x0001
  723. #define sysconfig_no_beep       0x0002
  724. #define sysconfig_high_speed    0x0004
  725. #define sysconfig_off_hook      0x0008
  726. #define sysconfig_two_color     0x0010
  727. #define sysconfig_flow_control  0x0020
  728. #define sysconfig_printer       0x0040
  729. #define sysconfig_list          0x0080
  730. #define sysconfig_no_xfer       0x0100
  731. #define sysconfig_2_way         0x0200
  732. #define sysconfig_no_alias      0x0400
  733. #define sysconfig_all_sysop     0x0800
  734. #define sysconfig_shrink_term   0x1000
  735. #define sysconfig_free_phone    0x2000
  736. #define sysconfig_log_dl        0x4000
  737. #define sysconfig_extended_info 0x8000
  738.  
  739. /* configoverrec.comflags */
  740. #define comflags_buffered_uart  0x0001
  741.  
  742. /* editorrec.config */
  743. #define config_80_25 0x0001
  744.  
  745. #define ansir_ansi       0x01
  746. #define ansir_no_DOS     0x02
  747. #define ansir_no_300     0x04
  748. #define ansir_shrink     0x08
  749. #define ansir_no_pause   0x10
  750. #define ansir_local_only 0x20
  751. #define ansir_multi_user 0x40
  752. #define ansir_rip_only   0x80
  753.  
  754. /* newexternalrec.othr */
  755. #define othr_error_correct     0x0001
  756. #define othr_bimodem           0x0002
  757. #define othr_override_internal 0x0004
  758.  
  759. /* statusrec.filechange [0..6] */
  760. #define filechange_names  0
  761. #define filechange_upload 1
  762. #define filechange_posts  2
  763. #define filechange_email  3
  764. #define filechange_net    4
  765.  
  766. /* g_flags */
  767. #define g_flag_disable_conf   0x00000001
  768. #define g_flag_disable_pause  0x00000002
  769. #define g_flag_scanned_files  0x00000004
  770. #define g_flag_made_find_str  0x00000008
  771. #define g_flag_pipe_colors    0x00000010
  772. #define g_flag_allow_extended 0x00000020
  773. #define g_flag_disable_mci    0x00000040
  774.  
  775. #define PREV 1
  776. #define NEXT 2
  777. #define DONE 4
  778. #define ABORTED 8
  779. #define NUM_ONLY 1
  780. #define UPPER_ONLY 2
  781. #define ALL 4
  782. #define SET 8
  783.  
  784. #define XFER_TIME(b) (modem_speed?\
  785.                       (((double)(((b)+127)/128))*1280.0/((double)modem_speed))\
  786.                       :0.0)
  787.  
  788. struct line {
  789.     char        text[160];
  790.     struct line     *prev,*next;
  791. };
  792.  
  793.  
  794. typedef struct {
  795.   short x1,y1,topline1,curatr1;
  796.   char *scrn1;
  797. } screentype;
  798.  
  799. typedef struct{
  800.   char name[13];
  801.   short len;
  802. } ext_desc_type;
  803.  
  804. typedef struct {
  805.     char        name[41],        /* g-file section name */
  806.             filename[9];        /* g-file database filename */
  807.     unsigned char    sl,            /* sl required to read */
  808.             age;            /* minimum age for section */
  809.     unsigned short    maxfiles,        /* max # of files */
  810.             ar;            /* AR for g-file section */
  811. } gfiledirrec;
  812.  
  813. typedef struct {
  814.     char        description[81],    /* description of file */
  815.             filename[13];        /* filename of file */
  816.         long        daten;            /* date added */
  817. } gfilerec;
  818.  
  819. typedef struct {
  820.         char            curspeed[23];           /* description of speed */
  821.         char            return_code[23];        /* modem result code */
  822.         unsigned short  modem_speed,            /* speed modems talk at */
  823.                         com_speed;              /* speed com port runs at */
  824. } resultrec;
  825.  
  826.  
  827. typedef struct {
  828.         char            name[20];               /* language "name" */
  829.         unsigned char   num;                    /* language "number" */
  830.         char            dir[79];                /* directory info stored in */
  831. } languagerec;
  832.  
  833. #define MAX_BUF 1024
  834.  
  835. #define INT_REAL_DOS 0x21
  836.  
  837. /****************************************************************************/
  838. /* modem info structure */
  839.  
  840. #define mode_norm     1   /* normal status */
  841. #define mode_ring     2   /* phone is ringing */
  842. #define mode_dis      3   /* disconnected (no connection) */
  843. #define mode_err      4   /* error encountered */
  844. #define mode_ringing  5   /* remote phone is ringing */
  845. #define mode_con      6   /* connection established */
  846. #define mode_ndt      7   /* no dial tone */
  847. #define mode_fax      8   /* fax connection */
  848. #define mode_cid_num  9   /* caller-id info, phone # */
  849. #define mode_cid_name 10  /* caller-id info, caller's name */
  850.  
  851. #define flag_as       1   /* asymmetrical baud rates */
  852. #define flag_ec       2   /* error correction in use */
  853. #define flag_dc       4   /* data compression in use */
  854. #define flag_fc       8   /* flow control should be used */
  855. #define flag_append   16  /* description string should be appended */
  856. /****************************************************************************/
  857.  
  858. #define SECONDS_PER_HOUR  3600L
  859. #define SECONDS_PER_DAY   86400L
  860.  
  861. typedef struct {
  862.   char result[41];
  863.   char description[31];
  864.   unsigned short main_mode;
  865.   unsigned short flag_mask;
  866.   unsigned short flag_value;
  867.   unsigned short com_speed;
  868.   unsigned short modem_speed;
  869. } result_info;
  870.  
  871. typedef struct {
  872.   unsigned short ver;
  873.   char name[81];
  874.   char init[161];
  875.   char setu[161];
  876.   char ansr[81];
  877.   char pick[81];
  878.   char hang[81];
  879.   char dial[81];
  880.  
  881.   char sepr[10];
  882.  
  883.   result_info defl;
  884.   unsigned short num_resl;
  885.   result_info resl[1];
  886. } modem_info;
  887.  
  888. /****************************************************************************/
  889. /* Dropfile stuff */
  890.  
  891. typedef struct {
  892.   char
  893.     display[2],
  894.     printer[2],
  895.     page_bell[2],
  896.     alarm[2],
  897.     sysop_next,
  898.     errcheck[2],
  899.     graphics,
  900.     nodechat,
  901.     openbps[5],
  902.     connectbps[5];
  903.   int
  904.     usernum;
  905.   char
  906.     firstname[15],
  907.     password[12];
  908.   int
  909.     time_on,
  910.     prev_used;
  911.   char
  912.     time_logged[5];
  913.   int
  914.     time_limit,
  915.     down_limit;
  916.   char
  917.     curconf,
  918.     bitmap1[5],
  919.     bitmap2[5];
  920.   int
  921.     time_added,
  922.     time_credit;
  923.   char
  924.     slanguage[4],
  925.     name[25];
  926.   int
  927.     sminsleft;
  928.   char
  929.     snodenum,
  930.     seventtime[5],
  931.     seventactive[2],
  932.     sslide[2],
  933.       smemmsg[4],
  934.     scomport,
  935.     packflag,
  936.     bpsflag;
  937.  
  938.   /* PCB 14.5 extra stuff */
  939.   char
  940.     ansi,
  941.     lastevent[8];
  942.   int
  943.     lasteventmin;
  944.   char
  945.     exittodos,
  946.     eventupcoming;
  947.   int
  948.     lastconfarea;
  949.   char
  950.     hconfbitmap;
  951.   /* end PCB 14.5 additions */
  952. } pcboard_sys_rec;
  953.  
  954. /****************************************************************************/
  955. /* conferencing stuff */
  956.  
  957. #define conf_status_ansi       0x0001  /* ANSI required */
  958. #define conf_status_wwivreg    0x0002  /* WWIV regnum required */
  959. #define conf_status_offline    0x0004  /* conference is "offline" */
  960.  
  961. #define CONF_UPDATE_INSERT     1
  962. #define CONF_UPDATE_DELETE     2
  963. #define CONF_UPDATE_SWAP       3
  964.  
  965. #define SUBCONF_TYPE unsigned short
  966. #define MAX_CONFERENCES 26
  967.  
  968. typedef struct {
  969.   unsigned char designator,       /* A to Z? */
  970.                 name[61],         /* Name of conference */
  971.                 minsl,            /* Minimum SL needed for access */
  972.                 maxsl,            /* Maximum SL allowed for access */
  973.                 mindsl,           /* Minimum DSL needed for access */
  974.                 maxdsl,           /* Maximum DSL allowed for access */
  975.                 minage,           /* Minimum age needed for access */
  976.                 maxage,           /* Maximum age allowed for access */
  977.                 sex;              /* Gender: 0=male, 1=female, 2=all */
  978.   SUBCONF_TYPE  status,           /* Bit-mapped stuff */
  979.                 minbps,           /* Minimum bps rate for access */
  980.                 ar,               /* ARs necessary for access */
  981.                 dar,              /* DARs necessary for access */
  982.                 num,              /* Num "subs" in this conference */
  983.                 maxnum,           /* max num subs allocated in 'subs' */
  984.                 *subs;            /* "Sub" numbers in this conference */
  985. } confrec;
  986.  
  987. /****************************************************************************/
  988.  
  989. #define CHAINFILE_CHAIN       0
  990. #define CHAINFILE_DORINFO     1
  991. #define CHAINFILE_PCBOARD     2
  992. #define CHAINFILE_CALLINFO    3
  993. #define CHAINFILE_DOOR        4
  994.  
  995. /****************************************************************************/
  996.  
  997. #define EFLAG_ABORT           0x0001  /* check for a ^C to abort program */
  998. #define EFLAG_INTERNAL        0x0002  /* make it look internal to BBS */
  999. #define EFLAG_NOHUP           0x0004  /* don't check for hangup (UL event) */
  1000. #define EFLAG_COMIO           0x0008  /* redirect IO to com port */
  1001. #define EFLAG_SHRINK          0x0010  /* shrink for more free mem (slower) */
  1002. #define EFLAG_FILES           0x0020  /* create shrink files for extrn progs */
  1003. #define EFLAG_NOPAUSE         0x0040  /* disable pause in remote */
  1004. #define EFLAG_NETPROG         0x0080  /* try running out of net dir first */
  1005. #define EFLAG_TOPSCREEN       0x0100  /* leave topscreen as-is */
  1006.  
  1007. /****************************************************************************/
  1008.  
  1009. #define OP_FLAGS_FORCE_NEWUSER_FEEDBACK   0x00000001
  1010. #define OP_FLAGS_CHECK_DUPE_PHONENUM      0x00000002
  1011. #define OP_FLAGS_HANGUP_DUPE_PHONENUM     0x00000004
  1012. #define OP_FLAGS_SIMPLE_ASV               0x00000008
  1013. #define OP_FLAGS_POSTTIME_COMPENSATE      0x00000010
  1014. #define OP_FLAGS_SHOW_HIER                0x00000020
  1015. #define OP_FLAGS_IDZ_DESC                 0x00000040
  1016. #define OP_FLAGS_SETLDATE                 0x00000080
  1017. #define OP_FLAGS_NEW_CHATSOUND            0x00000100
  1018. #define OP_FLAGS_SLASH_SZ                 0x00000200
  1019. #define OP_FLAGS_READ_CD_IDZ              0x00000400
  1020. #define OP_FLAGS_FSED_EXT_DESC            0x00000800
  1021. #define OP_FLAGS_FAST_TAG_RELIST          0x00001000
  1022. #define OP_FLAGS_MAIL_PROMPT              0x00002000
  1023. #define OP_FLAGS_SHOW_CITY_ST             0x00004000
  1024. #define OP_FLAGS_NO_EASY_DL               0x00008000
  1025. #define OP_FLAGS_NEW_EXTRACT              0x00010000
  1026. #define OP_FLAGS_FAST_SEARCH              0x00020000
  1027. #define OP_FLAGS_NET_CALLOUT              0x00040000
  1028. #define OP_FLAGS_WFC_SCREEN               0x00080000
  1029. #define OP_FLAGS_FIDO_PROCESS             0x00100000
  1030. #define OP_FLAGS_USER_REGIST              0x00200000
  1031. #define OP_FLAGS_MSG_TAG                  0x00400000
  1032. #define OP_FLAGS_CHAIN_REG                0x00800000
  1033. #define OP_FLAGS_CAN_SAVE_SSM             0x01000000
  1034. #define OP_FLAGS_PACKSCAN_FREQ            0x02000000
  1035. #define OP_FLAGS_EXTRA_COLOR              0x04000000
  1036. #define OP_FLAGS_RIP_SUPPORT              0x08000000
  1037. #define OP_FLAGS_RIPDRIVE_ON              0x10000000
  1038.  
  1039. #define E_C (sysinfo.flags & OP_FLAGS_EXTRA_COLOR)
  1040.  
  1041. /****************************************************************************/
  1042.  
  1043. typedef struct {
  1044.   unsigned char
  1045.     sl,
  1046.     dsl,
  1047.     exempt;
  1048.   unsigned short
  1049.     ar,
  1050.     dar,
  1051.     restrict;
  1052. } asv_rec;
  1053.  
  1054. typedef struct {
  1055.   unsigned long
  1056.     flags,
  1057.     flags1;
  1058.   unsigned short
  1059.     spawn_opts[20];
  1060.   unsigned char
  1061.     newuser_colors[10],
  1062.     newuser_bwcolors[10],
  1063.     topscreen_color,
  1064.     f1_color,
  1065.     editline_color,
  1066.     chat_select_color,
  1067.     msg_color,
  1068.     ripdir[80],
  1069.     ripbbsid[30],
  1070.     ripmenudate[14];
  1071.   asv_rec
  1072.     asv;
  1073.   unsigned short
  1074.     mail_who_field_len,
  1075.     max_batch,
  1076.     max_extend_lines,
  1077.     max_chains,
  1078.     max_gfilesec,
  1079.     screen_saver_time;
  1080.   char
  1081.     rip_rm_adjust;
  1082. } system_operation_rec;
  1083.  
  1084.  
  1085.  /* RIP support constants */
  1086. #define M_DEFAULT   '3'         /* Default menu set */
  1087. #define MAXMENU '9'             /* # of possible PD menus */
  1088.  
  1089. #define submenu_code   11
  1090.  
  1091. /* Constants for cleared flag */
  1092. #define WASCLEARED  -1
  1093. #define NEEDCLEAR   -2
  1094. #define HYPCLEAR    -3
  1095.  
  1096. /****************************************************************************/
  1097.  
  1098. typedef struct
  1099. {
  1100.   int pos, curlen, maxlen;
  1101.  
  1102.   int first;
  1103.  
  1104.   int xpos, ypos, amount_to_show;
  1105.   int curxpos, curypos;
  1106.  
  1107.   int insert, curmode, bs, char_case;
  1108.   char *text;
  1109.   char *show;
  1110.  
  1111. } inputeditrec;
  1112.  
  1113.  
  1114. typedef struct
  1115. {
  1116.   int xpos, ypos, amount_to_show;
  1117.   int curxpos, curypos;
  1118.  
  1119.   int justify;
  1120.   int bg, cur_color;
  1121.  
  1122.   char *text;
  1123.   char *show;
  1124. } showtextrec;
  1125.  
  1126. struct individuals
  1127. {
  1128.   unsigned one : 1;
  1129.   unsigned two : 1;
  1130.   unsigned three : 1;
  1131.   unsigned four : 1;
  1132.   unsigned five : 1;
  1133.   unsigned six : 1;
  1134.   unsigned seven : 1;
  1135.   unsigned eight : 1;
  1136.   unsigned nine : 1;
  1137.   unsigned ten : 1;
  1138.   unsigned eleven : 1;
  1139.   unsigned twelve : 1;
  1140.   unsigned thirteen : 1;
  1141.   unsigned fourteen : 1;
  1142.   unsigned fifteen : 1;
  1143.   unsigned sixteen : 1;
  1144. };
  1145.  
  1146. struct nonindividual
  1147. {
  1148.   unsigned int ni;
  1149. };
  1150.  
  1151.  
  1152.  
  1153. union bitinfo
  1154. {
  1155.   struct individuals i;
  1156.   struct nonindividual n;
  1157. };
  1158.  
  1159. typedef struct
  1160. {
  1161.   union bitinfo bi;
  1162.   int xpos, ypos;
  1163.   int amount; // Amount of active items
  1164.   int pos;
  1165.  
  1166.   int check_char, fill_char;
  1167. } checkboxrec;
  1168.  
  1169.  
  1170.  
  1171. typedef struct
  1172. {
  1173.   int xpos, ypos;
  1174.   int amount; // Amount of active items
  1175.   int pos, last;
  1176.  
  1177.   int radio_char, fill_char;
  1178. }radiobuttonrec;
  1179.  
  1180.  
  1181.  
  1182. typedef union
  1183. {
  1184.     showtextrec    st;
  1185.     inputeditrec   ie;
  1186.     radiobuttonrec rb;
  1187.     checkboxrec    cb;
  1188. } VARI_TYPES;
  1189.  
  1190.  
  1191. struct VariMenuRec
  1192. {
  1193.   int amount; // Only used in the first record
  1194.  
  1195.   int type;
  1196.  
  1197.   VARI_TYPES *types;
  1198.  
  1199.   int xpos, ypos;  // copied from each type for easy access
  1200.  
  1201.   unsigned hotkey;
  1202.   int active;
  1203.   int returnvalue;
  1204.  
  1205.   struct VariMenuRec *next;
  1206. };
  1207.  
  1208. typedef struct VariMenuRec varimenurec;
  1209.  
  1210. typedef struct
  1211. {
  1212.   // mi=menu item, ci=current item
  1213.   unsigned mi_normal, mi_hi, ci_normal, ci_hi;
  1214.   unsigned inactive_color;
  1215.   int redraw; // COMMON_NONE, COMMON_PARTIAL (pos and last), COMMON_FULL
  1216.   int pos, last;
  1217.  
  1218.   int xpos, ypos;  // Where the cursor is right now
  1219.  
  1220.   unsigned event;
  1221.   int status;
  1222.   int returnvalue;
  1223. } varimenuinfo;
  1224.  
  1225.  
  1226. typedef struct
  1227. {
  1228.   int width;
  1229.   int amount_per_square;
  1230.  
  1231.   char square_list[10];
  1232.  
  1233.   int empty_space, side_char1, side_char2;
  1234.   int surround_color, box_color;
  1235.  
  1236.   long total_items, current_item;
  1237.   long last_maj_pos, last_min_pos;
  1238. } statusbarrec;
  1239.  
  1240.  
  1241. typedef struct
  1242. {
  1243.   int pos, curlen, maxlen;
  1244.  
  1245.   int first;
  1246.  
  1247.   int xpos, ypos, amount_to_show;
  1248.   int curxpos, curypos;
  1249.  
  1250.   int insert, curmode, bs, char_case;
  1251.   char *text;
  1252.   char *show;
  1253.  
  1254.   char *picture[256];
  1255. } inputpicrec;
  1256.  
  1257.  
  1258. /****************************************************************************/
  1259.  
  1260. #include "instmsg.h"
  1261.  
  1262. /****************************************************************************/
  1263. #ifndef bbsmalloc
  1264. #ifdef __OS2__
  1265. #define bbsmalloc(x) malloc(x)
  1266. #define bbsfree(x) free(x)
  1267. #define bbscoreleft() coreleft()
  1268. #else
  1269.  
  1270. #define bbsmalloc(x) farmalloc(x)
  1271. #define bbsfree(x) farfree(x)
  1272. #define bbscoreleft() farcoreleft()
  1273. #if __TURBOC__ >= 0x0450
  1274. #define _chmod _rtl_chmod
  1275. #endif
  1276. #define ISR_VECT(n) ((n>7)?(0x68+n):(0x08+n))
  1277. #define ISR_CTRLR(n) ((n>7)?(0xa1):(0x21))
  1278. #define ISR_RESET(n) {outportb(0x20, 0x20); if (n>7) outportb(0xa0,0x20);}
  1279.  
  1280. #endif
  1281. #endif
  1282.  
  1283. #endif
  1284.