📄 mainformunit.pas
字号:
{ Hey Mike,
This is your basic user editor. I haven't implemented all of the fields
(see the etc. comments). The difficult type conversions have been made
(GetFlagsField, GetDateField).
Things we need to add:
o Record locking
o Deactive users
o Edit misc flags (settings), QWK settings, etc
I've included SBBSDEFS.H, since I may not have converted all the necessary
constants.
}
{ User Data function Notes:
The Tag member of the Edit boxes is used to indicate modified data.
GetUserXxxx() calls GetXxxxField() sets the Tag to 0.
PutUserXxxx() only gets PutXxxxField() if Tag = 1.
GetXxxxField() and PutXxxxField() do not care about TEdits or Tags.
}
unit MainFormUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus, ComCtrls, ExtCtrls, Buttons, ActnList, ImgList, CheckLst,
ToolWin, Registry;
type
TForm1 = class(TForm)
MainMenu: TMainMenu;
FileMenuItem: TMenuItem;
Panel: TPanel;
FileExitMenuItem: TMenuItem;
FileDeleteMenuItem: TMenuItem;
PageControl: TPageControl;
PersonalTabSheet: TTabSheet;
Label2: TLabel;
NameEdit: TEdit;
Label1: TLabel;
ComputerEdit: TEdit;
NetmailAddress: TLabel;
NetmailEdit: TEdit;
Label7: TLabel;
NoteEdit: TEdit;
HandleLabel: TLabel;
HandleEdit: TEdit;
Label5: TLabel;
PasswordEdit: TEdit;
Label6: TLabel;
BirthdateEdit: TEdit;
Label8: TLabel;
ModemEdit: TEdit;
Label16: TLabel;
SexEdit: TEdit;
Label18: TLabel;
PhoneEdit: TEdit;
SecurityTabSheet: TTabSheet;
Label10: TLabel;
LevelEdit: TEdit;
Label11: TLabel;
ExpireEdit: TEdit;
StatsTabSheet: TTabSheet;
TopPanel: TPanel;
NumberLabel: TLabel;
NumberEdit: TEdit;
TotalStaticText: TStaticText;
AliasLabel: TLabel;
AliasEdit: TEdit;
Label24: TLabel;
CommentEdit: TEdit;
FileNewUserMenuItem: TMenuItem;
Label25: TLabel;
ExemptionsEdit: TEdit;
Label26: TLabel;
RestrictionsEdit: TEdit;
Label27: TLabel;
CreditsEdit: TEdit;
Label28: TLabel;
MinutesEdit: TEdit;
Label29: TLabel;
FreeCreditsEdit: TEdit;
FileSaveUserMenuItem: TMenuItem;
ActionList: TActionList;
SaveUser: TAction;
NewUser: TAction;
RefreshUser: TAction;
ImageList: TImageList;
DeleteUser: TAction;
FileRefreshUserMenuItem: TMenuItem;
GroupBox1: TGroupBox;
TimeOnEdit: TEdit;
Label22: TLabel;
Label23: TLabel;
TimeOnTodayEdit: TEdit;
Label30: TLabel;
ExtraTimeEdit: TEdit;
Label31: TLabel;
LastCallTimeEdit: TEdit;
GroupBox2: TGroupBox;
Label20: TLabel;
LogonsEdit: TEdit;
Label21: TLabel;
LogonsTodayEdit: TEdit;
GroupBox3: TGroupBox;
Label17: TLabel;
FirstOnEdit: TEdit;
Label19: TLabel;
LastOnEdit: TEdit;
GroupBox4: TGroupBox;
Label32: TLabel;
PostsTotalEdit: TEdit;
Label33: TLabel;
PostsTodayEdit: TEdit;
GroupBox5: TGroupBox;
Label34: TLabel;
Label35: TLabel;
EmailTotalEdit: TEdit;
EmailTodayEdit: TEdit;
Label36: TLabel;
FeedbackEdit: TEdit;
GroupBox6: TGroupBox;
Label37: TLabel;
UploadedFilesEdit: TEdit;
Label38: TLabel;
UploadedBytesEdit: TEdit;
GroupBox7: TGroupBox;
Label39: TLabel;
Label40: TLabel;
DownloadedFilesEdit: TEdit;
DownloadedBytesEdit: TEdit;
GroupBox8: TGroupBox;
Label12: TLabel;
Flags1Edit: TEdit;
Label13: TLabel;
Flags2Edit: TEdit;
Label14: TLabel;
Flags3Edit: TEdit;
Label15: TLabel;
Flags4Edit: TEdit;
GroupBox9: TGroupBox;
AddressEdit: TEdit;
LocationEdit: TEdit;
ZipCodeEdit: TEdit;
DeactivateUser: TAction;
N1: TMenuItem;
FileDeactivateUserMenuItem: TMenuItem;
SettingsTabSheet: TTabSheet;
GroupBox10: TGroupBox;
Label3: TLabel;
RowsEdit: TEdit;
GroupBox11: TGroupBox;
GroupBox13: TGroupBox;
GroupBox15: TGroupBox;
ShellEdit: TEdit;
ExpertCheckBox: TCheckBox;
ChatCheckListBox: TCheckListBox;
TerminalCheckListBox: TCheckListBox;
LogonCheckListBox: TCheckListBox;
ToolBar: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
FindEdit: TEdit;
ToolButton6: TToolButton;
FindNextButton: TButton;
FindButton: TButton;
ScrollBar: TScrollBar;
Label42: TLabel;
LeechEdit: TEdit;
Status: TEdit;
ToolButton7: TToolButton;
MsgFileSettingsTabSheet: TTabSheet;
GroupBox16: TGroupBox;
Label41: TLabel;
MessageCheckListBox: TCheckListBox;
EditorEdit: TEdit;
GroupBox12: TGroupBox;
Label4: TLabel;
Label9: TLabel;
TempFileExtEdit: TEdit;
ProtocolEdit: TEdit;
FileCheckListBox: TCheckListBox;
GroupBox14: TGroupBox;
QWKCheckListBox: TCheckListBox;
ExtendedCommentTabSheet: TTabSheet;
Memo: TMemo;
procedure FormShow(Sender: TObject);
procedure ScrollBarChange(Sender: TObject);
procedure NumberEditKeyPress(Sender: TObject; var Key: Char);
procedure FileExitMenuItemClick(Sender: TObject);
procedure EditChange(Sender: TObject);
procedure SaveUserExecute(Sender: TObject);
procedure NewUserExecute(Sender: TObject);
procedure DeleteUserExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DeactivateUserExecute(Sender: TObject);
procedure FindButtonClick(Sender: TObject);
procedure FindEditKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
data_dir: AnsiString;
users: Integer;
user_misc: Integer;
user_chat: Integer;
user_qwk: Integer;
function LastUser: Integer;
procedure GetUserData(usernumber: Integer);
procedure PutUserData(usernumber: Integer);
end;
var
Form1: TForm1;
implementation
const ETX=#3; { End Of Text character, all fields use for padding/terminator }
const CR=#13; { Carriage-return }
const LF=#10; { Line-feed }
const { String lengths }
LEN_ALIAS =25; { User alias }
LEN_NAME =25; { User name }
LEN_HANDLE =8; { User chat handle }
LEN_NOTE =30; { User note }
LEN_COMP =30; { User computer description }
LEN_COMMENT =60; { User comment }
LEN_NETMAIL =60; { NetMail forwarding address }
LEN_PASS =8; { User password }
LEN_PHONE =12; { User phone number }
LEN_BIRTH =8; { Birthday in MM/DD/YY format }
LEN_ADDRESS =30; { User address }
LEN_LOCATION =30; { Location (City, State) }
LEN_ZIPCODE =10; { Zip/Postal code }
LEN_MODEM =8; { User modem type description }
LEN_FDESC =58; { File description }
LEN_FCDT =9; { 9 digits for file credit values }
LEN_TITLE =70; { Message title }
LEN_MAIN_CMD =40; { Storage in user.dat for custom commands }
LEN_XFER_CMD =40;
LEN_SCAN_CMD =40;
LEN_MAIL_CMD =40;
LEN_CID =25; { Caller ID (phone number) }
LEN_ARSTR =40; { Max length of Access Requirement string }
LEN_CHATACTCMD =9; { Chat action command }
LEN_CHATACTOUT =65; { Chat action output string }
{ This is a list of offsets into the USER.DAT file for different variables
that are stored (for each user) }
const
U_ALIAS =0; { Offset to alias }
U_NAME =U_ALIAS+LEN_ALIAS; { Offset to name }
U_HANDLE =U_NAME+LEN_NAME;
U_NOTE =U_HANDLE+LEN_HANDLE+2;
U_COMP =U_NOTE+LEN_NOTE;
U_COMMENT =U_COMP+LEN_COMP+2;
U_NETMAIL =U_COMMENT+LEN_COMMENT+2;
U_ADDRESS =U_NETMAIL+LEN_NETMAIL+2;
U_LOCATION =U_ADDRESS+LEN_ADDRESS;
U_ZIPCODE =U_LOCATION+LEN_LOCATION;
U_PASS =U_ZIPCODE+LEN_ZIPCODE+2;
U_PHONE =U_PASS+8; { Offset to phone-number }
U_BIRTH =U_PHONE+12; { Offset to users birthday }
U_MODEM =U_BIRTH+8;
U_LASTON =U_MODEM+8;
U_FIRSTON =U_LASTON+8;
U_EXPIRE =U_FIRSTON+8;
U_PWMOD =U_EXPIRE+8;
U_LOGONS =U_PWMOD+8+2;
U_LTODAY =U_LOGONS+5;
U_TIMEON =U_LTODAY+5;
U_TEXTRA =U_TIMEON+5;
U_TTODAY =U_TEXTRA+5;
U_TLAST =U_TTODAY+5;
U_POSTS =U_TLAST+5;
U_EMAILS =U_POSTS+5;
U_FBACKS =U_EMAILS+5;
U_ETODAY =U_FBACKS+5;
U_PTODAY =U_ETODAY+5;
U_ULB =U_PTODAY+5+2;
U_ULS =U_ULB+10;
U_DLB =U_ULS+5;
U_DLS =U_DLB+10;
U_CDT =U_DLS+5;
U_MIN =U_CDT+10;
U_LEVEL =U_MIN+10+2; { Offset to Security Level }
U_FLAGS1 =U_LEVEL+2; { Offset to Flags }
U_TL =U_FLAGS1+8; { Offset to unused field }
U_FLAGS2 =U_TL+2;
U_EXEMPT =U_FLAGS2+8;
U_REST =U_EXEMPT+8;
U_ROWS =U_REST+8+2; { Number of Rows on user's monitor }
U_SEX =U_ROWS+2; { Sex, Del, ANSI, color etc. }
U_MISC =U_SEX+1; { Miscellaneous flags in 8-byte hex }
U_OLDXEDIT =U_MISC+8; { External editor (Version 1 method) }
U_LEECH =U_OLDXEDIT+2; { two hex digits - leech attempt count }
U_CURSUB =U_LEECH+2; { Current sub (internal code }
U_CURDIR =U_CURSUB+8; { Current dir (internal code }
U_CMDSET =U_CURDIR+8; { unused }
U_MAIN_CMD =U_CMDSET+2+2; { unused }
U_XFER_CMD =U_MAIN_CMD+LEN_MAIN_CMD; { unused }
U_SCAN_CMD =U_XFER_CMD+LEN_XFER_CMD+2; { unused }
U_MAIL_CMD =U_SCAN_CMD+LEN_SCAN_CMD; { unused }
U_FREECDT =U_MAIL_CMD+LEN_MAIL_CMD+2;
U_FLAGS3 =U_FREECDT+10; { Flag set #3 }
U_FLAGS4 =U_FLAGS3+8; { Flag set #4 }
U_XEDIT =U_FLAGS4+8; { External editor (code) }
U_SHELL =U_XEDIT+8; { Command shell (code) }
U_QWK =U_SHELL+8; { QWK settings }
U_TMPEXT =U_QWK+8; { QWK extension }
U_CHAT =U_TMPEXT+3; { Chat settings }
U_NS_TIME =U_CHAT+8; { New-file scan date/time }
U_PROT =U_NS_TIME+8; { Default transfer protocol }
U_UNUSED =U_PROT+1;
U_LEN =(U_UNUSED+28+2);
{ Bit values for user_misc }
const
DELETED =(1 shl 0); { Deleted user }
ANSI =(1 shl 1); { Supports ANSI terminal emulation }
UCOLOR =(1 shl 2); { Send color codes }
RIP =(1 shl 3); { Supports RIP terminal emulation }
UPAUSE =(1 shl 4); { Pause on every screen full }
SPIN =(1 shl 5); { Spinning cursor - Same as K_SPIN }
INACTIVE =(1 shl 6); { Inactive user slot }
EXPERT =(1 shl 7); { Expert menu mode }
ANFSCAN =(1 shl 8); { Auto New file scan }
CLRSCRN =(1 shl 9); { Clear screen before each message }
QUIET =(1 shl 10); { Quiet mode upon logon }
BATCHFLAG =(1 shl 11); { File list allow batch dl flags }
NETMAIL =(1 shl 12); { Forward e-mail to fidonet addr }
CURSUB =(1 shl 13); { Remember current sub-board/dir }
ASK_NSCAN =(1 shl 14); { Ask for newscanning upon logon }
NO_EXASCII =(1 shl 15); { Don't send extended ASCII }
ASK_SSCAN =(1 shl 16); { Ask for messages to you at logon }
AUTOTERM =(1 shl 17); { Autodetect terminal type }
COLDKEYS =(1 shl 18); { No hot-keys }
EXTDESC =(1 shl 19); { Extended file descriptions }
AUTOHANG =(1 shl 20); { Auto-hang-up after transfer }
WIP =(1 shl 21); { Supports WIP terminal emulation }
AUTOLOGON =(1 shl 22); { AutoLogon via IP }
{ Bit values for user_chat }
const
CHAT_ECHO =(1 shl 0); { Multinode chat echo }
CHAT_ACTION =(1 shl 1); { Chat actions }
CHAT_NOPAGE =(1 shl 2); { Can't be paged }
CHAT_NOACT =(1 shl 3); { No activity alerts }
CHAT_SPLITP =(1 shl 4); { Split screen private chat }
{ Bits for user_qwk }
const
QWK_FILES =(1 shl 0); { Include new files list }
QWK_EMAIL =(1 shl 1); { Include unread e-mail }
QWK_ALLMAIL =(1 shl 2); { Include ALL e-mail }
QWK_DELMAIL =(1 shl 3); { Delete e-mail after download }
QWK_BYSELF =(1 shl 4); { Include messages from self }
QWK_UNUSED =(1 shl 5); { Currently unused }
QWK_EXPCTLA =(1 shl 6); { Expand ctrl-a codes to ascii }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -