A little tool for tagging (if you are tired of using mouse and arrows)

Posted under General

Show

void setxy(int x,int y)
{
COORD pos = {x, y};
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pos);
}

vector<string>V;
vector<string>pairV;
string superlist[20005];
int init()
{
//Somehow read the stuff into superlist. from file.
int g=0;
ifstream fin;
fin.open("_SUPERLIST.txt", ios::in);
string st;
while(!fin.eof())
{
fin>>st;
//cout<<st<<endl;
//Sleep(1000);
if(st!="")superlist[++g]=st;
}
if(g>0&&superlist[g]==superlist[g-1])superlist[g]="";
fin.close();
return 0;
}

string bufst;
int parsline(string st)
{
setxy(0,15);
for(int i=0;i<200;i++)
{
if(i>=bufst.size()&&i>=st.size())break;
if(i>=st.size())
{
setxy(0+i,15);cout<<' ';
}
if(i>=bufst.size()||bufst!=st)
{
setxy(0+i,15);cout<<st;
}
}
setxy(bufst.size(),16);cout<<" ";
setxy(st.size(),16);cout<<"^"; setxy(0,15);
if(st=="")
{
cout<<" ";
}
setxy(0,17);
cout<<" ";
setxy(0,17);
cout<<"TAGS:"<<V.size();
setxy(10,17);cout<<"LINE:"<<st.size();
bufst=st;
return 0;
}
int parsV(int k=0)
{
setxy(0,0);
for(int i=0;i<V.size();i++)
{
if(i+k>=V.size())
{
for(int j=0;j<=V.size();j++)cout<<" ";
}
else cout<<V<<" ";
}
return 0;
}
int chkpr(string st1,string st2)//tag mytag
{
if(st2==""||st1=="")return 0;
if(st1==st2)return 1;
string t;
if(st1.size()>st2.size())
{
t=st1;
t.erase(st2.size());
if(t==st2)return 1;
}
if(st2.size()==st1.size()+1)
{
t=st2;
t.erase(st1.size());
if(st1==t)return 1;
}
return 0;
}
int parspair(string st)
{
while(pairV.size()>0)pairV.pop_back();
string stt;
for(int i=0;i<=20000;i++)
{
stt=superlist;
if(stt[stt.size()-1]=='\n')stt.erase(stt.size()-1);
if(stt!=""&&chkpr(stt,st))pairV.Pb(superlist);
if(pairV.size()>8)break;
}
setxy(0,20);
for(int i=0;i<6;i++)cout<<" ";
//for(int i=0;i<=30;i++)cout<<" ";
//add autocorrect to 0 and bond a key?
setxy(0,20);
for(int i=0;i<pairV.size()&&i<10;i++)cout<<i+1<<" "<<pairV<<"\t\t";
return 0;
}
int allclear(int f=0)
{
if(f)
{
while(V.size()>0)V.pop_back();
return 0;
}
ofstream fout;
fout.open("_OUTPUT.txt", ios::out | ios::app);
for(int i=0;i<V.size();i++)fout<<V<<" ";
while(V.size()>0)V.pop_back();
fout<<endl<<endl<<endl<<endl<<endl<<endl;
fout.close();
return 0;
}int main()
{
system("color 0F");
system("mode con cols=100 lines=30");
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX cfi;
cfi.nFont = 1;
cfi.dwFontSize.X = 0;
cfi.dwFontSize.Y = 24;
cfi.FontFamily = FF_DONTCARE;
cfi.cbSize = sizeof(CONSOLE_FONT_INFOEX);
cfi.FontWeight = 1200;
//wcscpy(cfi.FaceName, fontName);
//wcscpy(cfi.FaceName,L"Raster");
SetCurrentConsoleFontEx(hConsole, FALSE, &cfi); init();
char t;
string st="";
int stlen;
bool selec=0;
int g=0;
bool fready=0;
while(1)
{ if(_kbhit())
{
t=_getch(); if(t!=8)g=0;
if (selec)
{
if(t==' ')
{
selec=0;
setxy(0,19);
cout<<" ";
continue;
}
setxy(0,19);
cout<<"SELECION:ON";
if(t<'0'&&t>'9')continue;
int k;
k=t-'0';
if(k==0)k=10;
k--;
if(k>=pairV.size())continue;
else st=pairV[k];
selec=0;
setxy(0,19);
cout<<" ";
fready=1;
}
else if(t==8)
{
if(st.size()>0)st.erase(st.size()-1);
else
{
g++;
//setxy(0,23);cout<<g<<" "<<V.size();
if(g==3)
{
parsV(1);
if(V.size()>0)V.pop_back();
g=0;
}
}
}
else if(t=='\r')
{
bool f=0;
for(int i=0;i<pairV.size();i++)if(pairV==st)f=1;
if(!f&&pairV.size()>0)
{
st=pairV[0];
fready=1;
}
else if(st=="")continue;
else if(st=="//NEW")
{
parsV(V.size());
allclear();
st="";
}
else if(st=="//ABORT")
{
parsV(V.size());
allclear(1);
st="";
}
//enter the word. if empty, nothing.
//if '//NEWL' ->clear everything.
//enterV(st);
else if(!fready)
{
fready=1;
}
else
{
f=0;
for(int i=0;i<V.size();i++)if(V==st)f=1;
if(!f)
{
V.push_back(st);
parsV();
} st="";
parsline(st);
}
}
else if(t==' ')
{
selec^=1;
setxy(0,19);
cout<<"SELECION:ON";
/*
if(st=="")continue;
if(st=="//NEW")
{
allclear();
parsV();
st=""; continue;
}
//enter the word. if empty, nothing.
//if '//NEWL' ->clear everything.
//enterV(st);
bool f=0;
for(int i=0;i<V.size();i++)if(V==st)f=1;
if(!f)
{
V.push_back(st);
parsV();
} st="";
parsline(st);
*/
}
else if(t>=32&&t<127)
{
st+=t;
fready=0;
}
//parsV();
parsline(st);
parspair(st);
if(fready)
{
setxy(20,17);
cout<<"READY TO ENTER ";
}
else
{
setxy(20,17);
cout<<"NOT READY YET ";
}
/*
if (selec)
{
setxy(0,24);
cout<<"SELECION:ON";
}
else
{
setxy(0,24);
cout<<" ";
}
*/ }
}
return 0;
}

Prepare your tags with only enter, space and backspace. You need to collect _SUPERLIST.txt on your own. Such as:

Show

vector<string>vst;
int main()
{
string t;
fstream fio;
fio.open("_SUPERLIST.txt", ios::in);
while(!fio.eof())
{
fio>>t;
if(t=="")continue;
bool f=0;
for(int i=0;i<vst.size();i++)if(vst==t)
{
f=1;
break;
}
if(!f)vst.push_back(t);
}
fio.close(); fio.open("_SUPERLIST.txt", ios::out);
for(int i=0;i<vst.size();i++)fio<<vst<<" ";
fio.close();
return 0;
}

You should use code blocks (see help:dtext) when typing code to preserve whitespace, like this:

Show
void setxy(int x,int y)
{
 COORD pos = {x, y};
 HANDLE hOut;
 hOut = GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleCursorPosition(hOut,pos);
}

vector<string>V;
vector<string>pairV;
string superlist[20005];
int init()
{
 //Somehow read the stuff into superlist. from file.
 int g=0;
 ifstream fin;
 fin.open("_SUPERLIST.txt", ios::in);
 string st;
 while(!fin.eof())
 {
  fin>>st;
  //cout<<st<<endl;
  //Sleep(1000);
  if(st!="")superlist[++g]=st;
 }
 if(g>0&&superlist[g]==superlist[g-1])superlist[g]="";
 fin.close();
 return 0;
}

string bufst;
int parsline(string st)
{
 setxy(0,15);
 for(int i=0;i<200;i++)
 {
  if(i>=bufst.size()&&i>=st.size())break;
  if(i>=st.size())
  {
   setxy(0+i,15);cout<<' ';
  }
  if(i>=bufst.size()||bufst[i]!=st[i])
  {
   setxy(0+i,15);cout<<st[i];
  }
 }
 setxy(bufst.size(),16);cout<<" ";
 setxy(st.size(),16);cout<<"^";
 
 setxy(0,15);
 if(st=="")
 {
  cout<<"                         ";
 }
 setxy(0,17);
 cout<<"   ";
 setxy(0,17);
 cout<<"TAGS:"<<V.size();
 setxy(10,17);cout<<"LINE:"<<st.size();
 bufst=st;
 return 0;
}
int parsV(int k=0)
{
 setxy(0,0);
 for(int i=0;i<V.size();i++)
 {
  if(i+k>=V.size())
  {
   for(int j=0;j<=V[i].size();j++)cout<<" ";
  }
  else cout<<V[i]<<" ";
 }
 return 0;
}
int chkpr(string st1,string st2)//tag mytag
{
 if(st2==""||st1=="")return 0;
 if(st1==st2)return 1;
 string t;
 if(st1.size()>st2.size())
 {
  t=st1;
  t.erase(st2.size());
  if(t==st2)return 1;
 }
 if(st2.size()==st1.size()+1)
 {
  t=st2;
  t.erase(st1.size());
  if(st1==t)return 1;
 }
 return 0;
}
int parspair(string st)
{
 while(pairV.size()>0)pairV.pop_back();
 string stt;
 for(int i=0;i<=20000;i++)
 {
  stt=superlist[i];
  if(stt[stt.size()-1]=='\n')stt.erase(stt.size()-1);
  if(stt!=""&&chkpr(stt,st))pairV.Pb(superlist[i]);
  if(pairV.size()>8)break;
 }
 setxy(0,20);
 for(int i=0;i<6;i++)cout<<"                                                                 ";
 //for(int i=0;i<=30;i++)cout<<"                       ";
 //add autocorrect to 0 and bond a key?
 setxy(0,20);
 for(int i=0;i<pairV.size()&&i<10;i++)cout<<i+1<<" "<<pairV[i]<<"\t\t";
 return 0;
}
int allclear(int f=0)
{
 if(f)
 {
  while(V.size()>0)V.pop_back();
  return 0;
 }
 ofstream fout;
 fout.open("_OUTPUT.txt", ios::out | ios::app);
 for(int i=0;i<V.size();i++)fout<<V[i]<<" ";
 while(V.size()>0)V.pop_back();
 fout<<endl<<endl<<endl<<endl<<endl<<endl;
 fout.close();
 return 0;
}

int main()
{
 system("color 0F");
 system("mode con cols=100 lines=30");
 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
 CONSOLE_FONT_INFOEX cfi;
 cfi.nFont = 1;
 cfi.dwFontSize.X = 0;
 cfi.dwFontSize.Y = 24;
 cfi.FontFamily = FF_DONTCARE;
 cfi.cbSize = sizeof(CONSOLE_FONT_INFOEX);
 cfi.FontWeight = 1200;
 //wcscpy(cfi.FaceName, fontName);
 //wcscpy(cfi.FaceName,L"Raster");
 SetCurrentConsoleFontEx(hConsole, FALSE, &cfi);
 
 
 init();
 char t;
 string st="";
 int stlen;
 bool selec=0;
 int g=0;
 bool fready=0;
 while(1)
 {
  
  if(_kbhit())
  {
   t=_getch();
   
   
   if(t!=8)g=0;
   if (selec)
   {
    if(t==' ')
    {
     selec=0;
     setxy(0,19);
     cout<<"           ";
     continue;
    }
    setxy(0,19);
    cout<<"SELECION:ON";
    if(t<'0'&&t>'9')continue;
    int k;
    k=t-'0';
    if(k==0)k=10;
    k--;
    if(k>=pairV.size())continue;
    else st=pairV[k];
    selec=0;
    setxy(0,19);
    cout<<"           ";
    fready=1;
   }
   else if(t==8)
   {
    if(st.size()>0)st.erase(st.size()-1);
    else
    {
     g++;
     //setxy(0,23);cout<<g<<" "<<V.size();
     if(g==3)
     {
      parsV(1);
      if(V.size()>0)V.pop_back();
      g=0;
     }
    }
   }
   else if(t=='\r')
   {
    bool f=0;
    for(int i=0;i<pairV.size();i++)if(pairV[i]==st)f=1;
    if(!f&&pairV.size()>0)
    {
     st=pairV[0];
     fready=1;
    }
    else if(st=="")continue;
    else if(st=="//NEW")
    {
     parsV(V.size());
     allclear();
     st="";
    }
    else if(st=="//ABORT")
    {
     parsV(V.size());
     allclear(1);
     st="";
    }
    //enter the word. if empty, nothing.
    //if '//NEWL' ->clear everything.
    //enterV(st);
    else if(!fready)
    {
     fready=1;
    }
    else
    {
     f=0;
     for(int i=0;i<V.size();i++)if(V[i]==st)f=1;
     if(!f)
     {
      V.push_back(st);
      parsV();
     }
     
     st="";
     parsline(st);
    }
   }
   else if(t==' ')
   {
    selec^=1;
    setxy(0,19);
    cout<<"SELECION:ON";
    /*
    if(st=="")continue;
    if(st=="//NEW")
    {
     allclear();
     parsV();
     st="";
     
     continue;
    }
    //enter the word. if empty, nothing.
    //if '//NEWL' ->clear everything.
    //enterV(st);
    bool f=0;
    for(int i=0;i<V.size();i++)if(V[i]==st)f=1;
    if(!f)
    {
     V.push_back(st);
     parsV();
    }
    
    st="";
    parsline(st);
    */
   }
   else if(t>=32&&t<127)
   {
    st+=t;
    fready=0;
   }
   //parsV();
   parsline(st);
   parspair(st);
   if(fready)
   {
    setxy(20,17);
    cout<<"READY TO ENTER ";
   }
   else
   {
    setxy(20,17);
    cout<<"NOT READY YET  ";
   }
   /*
   if (selec)
   {
    setxy(0,24);
    cout<<"SELECION:ON";
   }
   else
   {
    setxy(0,24);
    cout<<"           ";
   }
   */
   
  }
 }
 return 0;
}
Show
vector<string>vst;
int main()
{
 string t;
 fstream fio;
 fio.open("_SUPERLIST.txt", ios::in);
 while(!fio.eof())
 {
  fio>>t;
  if(t=="")continue;
  bool f=0;
  for(int i=0;i<vst.size();i++)if(vst[i]==t)
  {
   f=1;
   break;
  }
  if(!f)vst.push_back(t);
 }
 fio.close();
 
 fio.open("_SUPERLIST.txt", ios::out);
 for(int i=0;i<vst.size();i++)fio<<vst[i]<<" ";
 fio.close();
 return 0;
}

Although you should probably use more than one space per indentation level to make it a little easier to read.

1