Advertisement
Guest User

DBMgr

a guest
Dec 18th, 2016
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 18.40 KB | None | 0 0
  1. program DBMgr;
  2. {$mode objfpc}{$H+}
  3. uses sysutils, strutils, base64, MD5;
  4.  
  5. {= Variables & Constants ======================================================}
  6.  
  7. const
  8.  {LoginSalt1 = 'UQUfKmbDzAgjm97n';
  9.  LoginSalt2 = '57U0bnM7iCU0kGHc';
  10.  LoginSalt3 = '78ElGbeaRY8JIS9N';}
  11.  PasswordSalt1 = 'ypgbGbEnUqrTA9MH';
  12.  PasswordSalt2 = 'VlraVUZCPqF3o2vL';
  13.  PasswordSalt3 = 'EKyvJaboNlkch62Z';
  14.  
  15.  SepChar:char = '|';
  16.  
  17. {= Procedures & Functions =====================================================}
  18.  
  19. {function ValidData(d:string):boolean;
  20. begin
  21.  result:= not (pos(SepChar,d)>0);
  22. end;}
  23.  
  24. {function EncryptMD5Login(l:string):string;
  25. begin
  26.  result:=MD5Print(MD5String(MD5Print(MD5String(LoginSalt1+l+LoginSalt2))+LoginSalt3));
  27. end;}
  28.  
  29. function EncryptMD5Password(p:string):string;
  30. begin
  31.  result:=MD5Print(MD5String(MD5Print(MD5String(PasswordSalt1+p+PasswordSalt2))+PasswordSalt3));
  32. end;
  33.  
  34. function EncryptBase64(t:string):string;
  35. begin
  36.  result:=base64.EncodeStringBase64(t);
  37. end;
  38.  
  39. function DecryptBase64(t:string):string;
  40. begin
  41.  result:=base64.DecodeStringBase64(t);
  42. end;
  43.  
  44. {= DB compress ================================================================}
  45. type TDBItemPerms=(tdbit_administrator,tdbit_manager,tdbit_user);
  46.  
  47. type TDBItem=object
  48.  public
  49.  ID:Cardinal;
  50.  item_login,crypted_password:string;
  51.  item_perm:TDBItemPerms;
  52.  datatext:string;
  53.  procedure FromDBObj(s:string);
  54.  function ToDBObj:string;
  55. end;
  56.  
  57. procedure TDBItem.FromDBObj(s:string);
  58. begin
  59.  s:=DecryptBase64(s);
  60.  self.id:=StrToInt(Copy(s,1,pos(SepChar,s)-1));
  61.  Delete(s,1,pos(SepChar,s));
  62.  self.item_login:=Copy(s,1,pos(SepChar,s)-1);
  63.  Delete(s,1,pos(SepChar,s));
  64.  self.crypted_password:=Copy(s,1,pos(SepChar,s)-1);
  65.  Delete(s,1,pos(SepChar,s));
  66.  self.item_perm:=TDBItemPerms(StrToInt(Copy(s,1,pos(SepChar,s)-1)));
  67.  Delete(s,1,pos(SepChar,s));
  68.  self.datatext:=DecryptBase64(s);
  69. end;
  70.  
  71. function TDBItem.ToDBObj:string;
  72. begin
  73.  result:=
  74.  EncryptBase64(
  75.  IntToStr(Self.ID) + SepChar +
  76.  self.item_login + SepChar +
  77.  self.crypted_password + SepChar +
  78.  IntToStr(Integer(self.item_perm)) + SepChar +
  79.  EncryptBase64(self.datatext)
  80.  );
  81. end;
  82.  
  83. type TDB=object
  84.  protected
  85.  Data:array of TDBItem;
  86.  MyAccountID:cardinal;
  87.  Autorized:boolean;
  88.  public
  89.  procedure OpenDB(path:string);
  90.  procedure SaveDB(path:string);
  91.  procedure CreateDB(path:string);
  92.  function GetItemIndex(login:string):cardinal;
  93.  procedure Auth(login,pass:string);
  94.  procedure AddUser(Login,Pass:string; Perm:TDBItemPerms);
  95.  procedure SetNewLogin(OldLogin,NewLogin:string);
  96.  procedure DeleteItem(Login:string);
  97.  procedure SetNewPass(Login,NewPass:string);
  98.  procedure SetDataText(Login,DText:string);
  99.  procedure Reg(Login,Pass:string);
  100.  function GetNextID:cardinal;
  101.  function GetDataText(Login:string):string;
  102.  procedure Print;
  103.  procedure Me;
  104.  procedure Find(s:string);
  105. end;
  106.  
  107. procedure TDB.Print;
  108. var i:cardinal;
  109. begin
  110.  if length(self.data)=0 then
  111.  begin
  112.  writeln('null');
  113.  exit;
  114.  end;
  115.  writeln('======================================');
  116.  writeln('DB list of registered:');
  117.  writeln('======================================');
  118.  for i:=0 to length(self.data)-1 do
  119.  begin
  120.  case self.data[i].item_perm of
  121.  tdbit_administrator:write('[ADMINISTRATOR] | ');
  122.  tdbit_manager: write('[MANAGER] | ');
  123.  tdbit_user: write('[USER] | ');
  124.  end;
  125.  writeln(self.data[i].item_login);
  126.  end;
  127.  writeln('======================================');
  128. end;
  129.  
  130. procedure TDB.SetDataText(Login,DText:string);
  131. var
  132.  i:cardinal;
  133. begin
  134.  if not Autorized then
  135.  begin
  136.  writeln('Please login. Hint: user auth <login> <password>');
  137.  exit;
  138.  end;
  139.  i:=GetItemIndex(Login);
  140.  if i=length(self.data) then
  141.  begin
  142.  writeln('User "'+login+'" not found.');
  143.  exit;
  144.  end;
  145.  if (((Self.Data[MyAccountID].item_perm=tdbit_manager)and(Self.Data[i].item_perm<>tdbit_user))
  146.  or (Self.Data[MyAccountID].item_perm=tdbit_user)) and (MyAccountID<>i)
  147.  then begin
  148.  WriteLn('You don''t have permissions for do that.');
  149.  exit;
  150.  end;
  151.  if length(DText)=0 then
  152.  Self.Data[i].datatext:='null'
  153.  else
  154.  Self.Data[i].datatext:=DText;
  155. end;
  156.  
  157. function TDB.GetDataText(Login:string):string;
  158. var
  159.  i:cardinal;
  160. begin
  161.  if not Autorized then
  162.  begin
  163.  writeln('Please login. Hint: user auth <login> <password>');
  164.  exit;
  165.  end;
  166.  i:=GetItemIndex(Login);
  167.  if i=length(self.data) then
  168.  begin
  169.  writeln('User "'+login+'" not found.');
  170.  exit;
  171.  end;
  172.  if (((Self.Data[MyAccountID].item_perm=tdbit_manager)and(Self.Data[i].item_perm<>tdbit_user))
  173.  or (Self.Data[MyAccountID].item_perm=tdbit_user)) and (MyAccountID<>i)
  174.  then begin
  175.  WriteLn('You don''t have permissions for do that.');
  176.  exit;
  177.  end;
  178.  result:=Self.Data[i].datatext;
  179. end;
  180.  
  181. procedure TDB.SetNewLogin(OldLogin,NewLogin:string);
  182. var
  183.  i:cardinal;
  184. begin
  185.  if not Autorized then
  186.  begin
  187.  writeln('Please login. Hint: user auth <login> <password>');
  188.  exit;
  189.  end;
  190.  if GetItemIndex(NewLogin)<>Length(Self.Data) then
  191.  begin
  192.  Writeln('Login "'+NewLogin+'" already reserved.');
  193.  exit;
  194.  end;
  195.  i:=GetItemIndex(OldLogin);
  196.  if i=length(self.data) then
  197.  begin
  198.  writeln('User "'+oldlogin+'" not found.');
  199.  exit;
  200.  end;
  201.  if (((Self.Data[MyAccountID].item_perm=tdbit_manager)and(Self.Data[i].item_perm<>tdbit_user))
  202.  or (Self.Data[MyAccountID].item_perm=tdbit_user)) and (MyAccountID<>i)
  203.  then begin
  204.  WriteLn('You don''t have permissions for do that.');
  205.  exit;
  206.  end;
  207.  Self.Data[i].item_login:=NewLogin;
  208. end;
  209.  
  210. procedure TDB.SetNewPass(Login,NewPass:string);
  211. var
  212.  i:cardinal;
  213. begin
  214.  if not Autorized then
  215.  begin
  216.  writeln('Please login. Hint: user auth <login> <password>');
  217.  exit;
  218.  end;
  219.  i:=GetItemIndex(Login);
  220.  if i=length(self.data) then
  221.  begin
  222.  writeln('User "'+login+'" not found.');
  223.  exit;
  224.  end;
  225.  if (((Self.Data[MyAccountID].item_perm=tdbit_manager)and(Self.Data[i].item_perm<>tdbit_user))
  226.  or (Self.Data[MyAccountID].item_perm=tdbit_user)) and (MyAccountID<>i)
  227.  then begin
  228.  WriteLn('You don''t have permissions for do that.');
  229.  exit;
  230.  end;
  231.  Self.Data[i].crypted_password:=EncryptMD5Password(NewPass);
  232. end;
  233.  
  234. procedure TDB.DeleteItem(Login:string);
  235. var
  236.  i:cardinal;
  237. begin
  238.  if not Autorized then
  239.  begin
  240.  writeln('Please login. Hint: user auth <login> <password>');
  241.  exit;
  242.  end;
  243.  i:=GetItemIndex(Login);
  244.  if i=length(self.data) then
  245.  begin
  246.  writeln('User "'+login+'" not found.');
  247.  exit;
  248.  end;
  249.  if (((Self.Data[MyAccountID].item_perm=tdbit_manager)and(Self.Data[i].item_perm<>tdbit_user))
  250.  or (Self.Data[MyAccountID].item_perm=tdbit_user)) and (MyAccountID<>i)
  251.  then begin
  252.  WriteLn('You don''t have permissions for do that.');
  253.  exit;
  254.  end;
  255.  if MyAccountID=i then autorized:=false;
  256.  if MyAccountID=length(self.data)-1 then
  257.   MyAccountID:=i;
  258.  Self.Data[i]:=Self.Data[length(self.data)-1];
  259.  setlength(self.data,length(self.data)-1);
  260. end;
  261.  
  262. function TDB.GetNextID:cardinal;
  263.  function max(a,b:cardinal):cardinal;
  264.  begin
  265.  if a>=b then result:=a else result:=b;
  266.  end;
  267.  var i,maxID:cardinal;
  268. begin
  269.  if length(Self.Data)=0 then
  270.  begin
  271.  result:=0;
  272.  exit;
  273.  end;
  274.  maxID:=Self.Data[0].ID;
  275.  for i:=1 to Length(Self.Data)-1 do
  276.  begin
  277.  maxID:=max(self.data[i].id,maxID);
  278.  end;
  279.  result:=maxID+1;
  280. end;
  281.  
  282. procedure TDB.OpenDB(path:string);
  283. var
  284.  f:textfile;
  285.  buf:string;
  286. begin
  287.  try
  288.  SetLength(Self.Data,0);
  289.  Assign(f,path);
  290.  Reset(f);
  291.  while not Eof(f) do
  292.  begin
  293.  readln(f,buf);
  294.  SetLength(Self.Data,Length(Self.Data)+1);
  295.  Self.Data[Length(Self.Data)-1].FromDBObj(buf);
  296.  end;
  297.  Close(f);
  298.  Autorized:=false;
  299.  writeln('Success.');
  300.  except
  301.  writeln('We get trouble, when open "'+path+'".');
  302.  end;
  303. end;
  304.  
  305. procedure TDB.reg(login,pass:string);
  306. begin
  307.  if GetItemIndex(Login)<>Length(Self.Data) then
  308.  begin
  309.  Writeln('Login "'+Login+'" already reserved.');
  310.  exit;
  311.  end;
  312.  SetLength(Self.Data,Length(Self.Data)+1);
  313.  with Self.Data[length(Self.Data)-1] do
  314.  begin
  315.  id:=GetNextID;
  316.  item_login:={EncryptMD5Login}(Login);
  317.  crypted_password:=EncryptMD5Password(Pass);
  318.  if length(Self.Data)=1 then
  319.  item_perm:=tdbit_administrator
  320.  else
  321.  item_perm:=tdbit_user;
  322.  datatext:='null';
  323.  end;
  324.  writeln('Success.');
  325. end;
  326.  
  327. procedure TDB.SaveDB(path:string);
  328. label
  329.  SelfExit;
  330. var
  331.  f:textfile;
  332.  i:cardinal;
  333. begin
  334.  try
  335.  Assign(f,path);
  336.  Rewrite(f);
  337.  if length(self.Data)=0 then goto SelfExit;
  338.  for i:=0 to length(Self.Data)-2 do
  339.  writeln(f,Self.Data[i].ToDBObj);
  340.  write(f,Self.Data[Length(Self.Data)-1].ToDBObj);
  341.  SelfExit:
  342.  Close(f);
  343.  writeln('Success.');
  344.  except
  345.  writeln('We get trouble, when save "'+path+'".');
  346.  end;
  347. end;
  348.  
  349. procedure TDB.CreateDB(path:string);
  350. var
  351.  f:textfile;
  352. begin
  353.  try
  354.  SetLength(Self.Data,0);
  355.  Assign(f,path);
  356.  Rewrite(f);
  357.  Close(f);
  358.  writeln('Success.');
  359.  except
  360.  writeln('We get trouble, when create "'+path+'".');
  361.  end;
  362. end;
  363.  
  364. function TDB.GetItemIndex(login:string):cardinal;
  365. label
  366.  SelfExit;
  367. var
  368.  i:cardinal;
  369. begin
  370.  if length(Self.Data)=0 then goto SelfExit;
  371.  for i:=0 to Length(Self.Data)-1 do
  372.  if Self.Data[i].item_login=login then
  373.  begin
  374.  result:=i;
  375.  exit;
  376.  end;
  377.  SelfExit:
  378.  result:=Length(Self.Data);
  379. end;
  380.  
  381. procedure TDB.Auth(login,pass:string);
  382. var i:cardinal;
  383. begin
  384.  i:=GetItemIndex({EncryptMD5Login}(login));
  385.  if i=length(self.data) then
  386.  begin
  387.  writeln('User "'+login+'" not found.');
  388.  exit;
  389.  end;
  390.  if Self.Data[i].crypted_password=EncryptMD5Password(pass) then
  391.  begin
  392.  MyAccountID:=i;
  393.  Autorized:=true;
  394.  writeln('Success.');
  395.  end
  396.  else
  397.  Writeln('Wrong password.');
  398. end;
  399.  
  400. procedure TDB.AddUser(Login,Pass:string; Perm:TDBItemPerms);
  401. begin
  402.  if not Autorized then
  403.  begin
  404.  writeln('Please login. Hint: user auth <login> <password>');
  405.  exit;
  406.  end;
  407.  if GetItemIndex(Login)<>Length(Self.Data) then
  408.  begin
  409.  Writeln('Login "'+Login+'" already reserved.');
  410.  exit;
  411.  end;
  412.  if ((Self.Data[MyAccountID].item_perm<>tdbit_administrator)and((Perm=tdbit_administrator)or(Perm=tdbit_manager)))
  413.  then begin
  414.  WriteLn('You don''t have permissions for do that.');
  415.  exit;
  416.  end;
  417.  SetLength(Self.Data,Length(Self.Data)+1);
  418.  with Self.Data[length(Self.Data)-1] do
  419.  begin
  420.  id:=GetNextID;
  421.  item_login:={EncryptMD5Login}(Login);
  422.  crypted_password:=EncryptMD5Password(Pass);
  423.  item_perm:=Perm;
  424.  end;
  425.  writeln('Success.');
  426. end;
  427.  
  428. procedure TDB.Me;
  429. begin
  430.  if not Autorized then
  431.  begin
  432.  writeln('Login : null');
  433.  writeln('Password hash : null');
  434.  writeln('Permissions : null');
  435.  exit;
  436.  end;
  437.  with Self.Data[MyAccountID] do
  438.  begin
  439.  writeln('Login : ',item_login);
  440.  writeln('Password hash : ',crypted_password);
  441.  write('Permissions : ');
  442.  case item_perm of
  443.  tdbit_user:writeln('User');
  444.  tdbit_manager:writeln('Manager');
  445.  tdbit_administrator:writeln('Administrator');
  446.  end;
  447.  end;
  448. end;
  449.  
  450. procedure TDB.Find(s:string);
  451. var
  452.  i:cardinal;
  453.  ResStack:array of cardinal;
  454. begin
  455.  SetLength(ResStack,0);
  456.  if length(self.Data)=0 then
  457.  begin
  458.  writeln('Search return no results.');
  459.  exit;
  460.  end;
  461.  for i:=0 to length(self.data)-1 do
  462.  if pos(s,self.data[i].item_login)>0 then
  463.  begin
  464.  SetLength(ResStack,length(ResStack)+1);
  465.  ResStack[Length(ResStack)-1]:=i;
  466.  end;
  467.  if length(ResStack)=0 then
  468.  begin
  469.  writeln('Search return no results.');
  470.  exit;
  471.  end;
  472.  writeln('======================================');
  473.  writeln('Search results:');
  474.  writeln('======================================');
  475.  for i:=0 to length(ResStack)-1 do
  476.  begin
  477.  case self.data[ResStack[i]].item_perm of
  478.  tdbit_administrator:write('[ADMINISTRATOR] | ');
  479.  tdbit_manager: write('[MANAGER] | ');
  480.  tdbit_user: write('[USER] | ');
  481.  end;
  482.  writeln(self.data[ResStack[i]].item_login);
  483.  end;
  484.  writeln('======================================');
  485. end;
  486.  
  487. var
  488.  DB:TDB;
  489.  
  490. {= Commands ===================================================================}
  491.  
  492. procedure WriteHelp;
  493. begin
  494.  writeln('+===================================================+');
  495.  writeln('| DBMgr help list: |');
  496.  writeln('+===================================================+');
  497.  writeln('| help |');
  498.  writeln('| *show this box. |');
  499.  writeln('+---------------------------------------------------+');
  500.  writeln('| db create <file> |');
  501.  writeln('| *create database. |');
  502.  writeln('+---------------------------------------------------+');
  503.  writeln('| db open <file> |');
  504.  writeln('| *open database. |');
  505.  writeln('+---------------------------------------------------+');
  506.  writeln('| db save <file> |');
  507.  writeln('| *save database. |');
  508.  writeln('+---------------------------------------------------+');
  509.  writeln('| db print |');
  510.  writeln('| *output database to console. |');
  511.  writeln('+---------------------------------------------------+');
  512.  writeln('| user reg <name> <password> |');
  513.  writeln('| *register new user. First user permisions set as |');
  514.  writeln('| Administrator. |');
  515.  writeln('+---------------------------------------------------+');
  516.  writeln('| user auth <name> <password> |');
  517.  writeln('| *auth into database. |');
  518.  writeln('+---------------------------------------------------+');
  519.  writeln('| user add <name> <password> <permissions> |');
  520.  writeln('| *add new user in database. |');
  521.  writeln('+---------------------------------------------------+');
  522.  writeln('| user del <name> <password>               |');
  523.  writeln('| *delete user from database.|');
  524.  writeln('+---------------------------------------------------+');
  525.  writeln('| user setlogin <login> <new login> |');
  526.  writeln('| *change user login. |');
  527.  writeln('+---------------------------------------------------+');
  528.  writeln('| user setpassw <login> <new password> |');
  529.  writeln('| *change user password. |');
  530.  writeln('+---------------------------------------------------+');
  531.  writeln('| user setdata <login> <data> |');
  532.  writeln('| *change user data |');
  533.  writeln('+---------------------------------------------------+');
  534.  writeln('| user getdata <login> |');
  535.  writeln('| *output user data to console |');
  536.  writeln('+---------------------------------------------------+');
  537.  writeln('| user me |');
  538.  writeln('| *your session info. |');
  539.  writeln('+---------------------------------------------------+');
  540.  writeln('| user find <part of login> |');
  541.  writeln('| *find all users wich logins concat request. |');
  542.  writeln('+---------------------------------------------------+');
  543.  writeln('| exit |');
  544.  writeln('| *exit from DBMgr. |');
  545.  writeln('+===================================================+');
  546.  writeln('| Example: |');
  547.  writeln('| 1. db create "test.db" |');
  548.  writeln('| 2. user reg "Pimankin Alexandr" "My password" |');
  549.  writeln('| 3. db save "test.db" |');
  550.  writeln('+===================================================+');
  551.  writeln('| Autor: Pimankin Alexandr, 2016. |');
  552.  writeln('+===================================================+');
  553. end;
  554.  
  555. {= CMD Parser & Interprer =====================================================}
  556.  
  557. const rword: array[0..1] of string=('','');
  558.  
  559. function smartlowercase(s:string):string;
  560. var q:boolean;
  561. begin
  562.  result:='';
  563.  q:=false;
  564.  while length(s)<>0 do
  565.  begin
  566.  if (s[1]='#')and(q=false)
  567.  then exit;
  568.  if (s[1]='"')
  569.  then q:=not q;
  570.  if (q=true)
  571.  then result:=
  572.  result+s[1]
  573.  else
  574.  begin
  575.  if not ((s[1]=s[2])and(s[1]=' ')) then
  576.  result:=
  577.  result+
  578.  lowercase(s[1]);
  579.  end;
  580.  delete(s,1,1);
  581.  end;
  582. end;
  583.  
  584. function getfirststr(s:string):string;
  585. var r:string;
  586. begin
  587.  r:='';
  588.  delete(s,1,1);
  589.  while (s[1]<>'"')and(length(s)<>0) do
  590.  begin
  591.  if s[1]<>'"' then begin r:=r+s[1];
  592.  delete(s,1,1); end;
  593.  end;
  594.  result:='"'+r+'"';
  595. end;
  596.  
  597. function getfirstobj(s:string):string;
  598. begin
  599.  result:='';
  600.  if s[1]='"' then begin
  601.  result:=getfirststr(s);
  602.  exit;
  603.  end;
  604.  if length(s)<>0 then
  605.  begin
  606.  if pos(' ',s)>0 then result:=copy(s,1,pos(' ',s)-1) else result:=s;
  607.  end;
  608. end;
  609.  
  610. function getfirsttkn(s:string):string;
  611. var x:integer;
  612. begin
  613.  s:=trim(s);
  614.  for x:=0 to length(rword)-1 do
  615.  if (copy(s,0,length(rword[x]))=rword[x])
  616.  and (s[length(rword[x])+1]=' ') then
  617.  begin
  618.  result:=copy(s,0,length(rword[x]));
  619.  if result='"' then result:=getfirststr(s);
  620.  end
  621.  else result:=getfirstobj(s);
  622. end;
  623.  
  624. function cutfirsttkn(s:string):string;
  625. begin
  626.  s:=trim(s);
  627.  delete(s,1,length(getfirsttkn(s)));
  628.  result:=trim(s);
  629. end;
  630.  
  631. function isstr(s:string):boolean;
  632. begin
  633.  result:=(s[1]='"')and(s[length(s)]='"')and
  634.  (pos('"',copy(s,2,length(s)-2))=0);
  635. end;
  636.  
  637. function getstr(s:string):string;
  638. begin
  639.  if isstr(s) then result:=copy(s,2,length(s)-2)
  640.  else result:=s;
  641. end;
  642.  
  643. var c:array of string;
  644.  
  645. procedure convert(str:string);
  646. begin
  647.  repeat
  648.  setlength(c,length(c)+1);
  649.  c[length(c)-1]:=getstr(getfirsttkn(str));
  650.  str:=cutfirsttkn(str);
  651.  until length(str)=0;
  652. end;
  653.  
  654. procedure listen;
  655. var s:string;
  656. begin
  657.  readln(s);
  658.  s:=smartlowercase(s);
  659.  s:=trim(s);
  660.  convert(s);
  661. end;
  662.  
  663. var cmds:array[0..17] of ansistring=(
  664. 'help',
  665. 'db',
  666. 'open', //db
  667. 'save', //db
  668. 'create', //db 'print', //db
  669. 'user',
  670. 'reg', //user
  671. 'auth', //user
  672. 'add', //user
  673. 'setlogin', //user
  674. 'setpassw', //user
  675. 'setdata', //user
  676. 'getdata', //user
  677. 'me', //user
  678. 'find', //user
  679. 'del', //user
  680. 'exit'
  681. );
  682.  
  683. perms:array [0..2] of ansistring=('admin','manager','user');
  684.  
  685. procedure work;
  686. begin
  687.  if length(c)<>0 then
  688.  begin
  689.  case AnsiIndexStr(c[0],cmds) of
  690.  0:writehelp;
  691.  1: case AnsiIndexStr(c[1],cmds) of
  692.  2:db.OpenDB(c[2]);
  693.  3:db.SaveDB(c[2]);
  694.  4:db.CreateDB(c[2]);
  695.  5:db.Print;
  696.  else writeln('Invalid use. Hint: db <open|save|create> <path>');
  697.  end;
  698.  6: case AnsiIndexStr(c[1],cmds) of
  699.  7:db.Reg(c[2],c[3]);
  700.  8:db.Auth(c[2],c[3]);
  701.  9:db.AddUser(c[2],c[3],TDBItemPerms(AnsiIndexStr(c[4],perms)));
  702.  10:db.SetNewLogin(c[2],c[3]);
  703.  11:db.SetNewPass(c[2],c[3]);
  704.  12:db.SetDataText(c[2],c[3]);
  705.  13:writeln(db.GetDataText(c[2]));
  706.  14:db.Me;
  707.  15:db.find(c[2]);
  708.  16:db.deleteitem(c[2]);
  709.  else writeln('Invalid use.');
  710.  end;
  711.  17: halt;
  712.  else writeln('Invalid comand, type "help" for see list of commands.');
  713.  end;
  714.  end;
  715. end;
  716.  
  717. procedure prepare;
  718. begin
  719.  setlength(c,0);
  720. end;
  721.  
  722. begin
  723.  db.Autorized:=false;
  724.  writeln('DBMgr. Type "help" for see list of commands.');
  725.  repeat
  726.  write('~>');
  727.  prepare;
  728.  listen;
  729.  work;
  730.  until false;
  731. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement