[Pinfo-devel] r89 - pinfo/branches/cxx/src
Nathanael Nerode
neroden-guest at costa.debian.org
Tue Aug 30 12:03:01 UTC 2005
Author: neroden-guest
Date: 2005-08-30 12:03:01 +0000 (Tue, 30 Aug 2005)
New Revision: 89
Modified:
pinfo/branches/cxx/src/manual.cxx
Log:
Convert manuallinks to std::vector.
Modified: pinfo/branches/cxx/src/manual.cxx
===================================================================
--- pinfo/branches/cxx/src/manual.cxx 2005-08-30 11:41:44 UTC (rev 88)
+++ pinfo/branches/cxx/src/manual.cxx 2005-08-30 12:03:01 UTC (rev 89)
@@ -27,6 +27,8 @@
#include <sys/stat.h>
#include <string>
using std::string;
+#include <vector>
+using std::vector;
#define HTTPSECTION 100
#define FTPSECTION 101
@@ -96,7 +98,7 @@
int manualhistorylength = 0;
/* this structure describes a hyperlink in manual viewer */
-typedef struct
+typedef struct manuallink
{ /* struct for hypertext references */
int line; /* line of the manpage, where the reference is */
/* column of that line */
@@ -112,11 +114,8 @@
manuallink;
/* a set of manual references of man page */
-manuallink *manuallinks = 0;
+vector<manuallink> manuallinks;
-/* number of found manual references in man page */
-int ManualLinks = 0;
-
/* semaphore for checking if it's a history(left arrow) call */
int historical = 0;
@@ -139,15 +138,13 @@
ManualLines = 0;
}
/* ...and for the list of manual hypertext */
- if (manuallinks)
+ if (manuallinks.size() > 0)
{ /* links */
- for (i = 0; i < ManualLinks; i++)
+ for (i = 0; i < manuallinks.size(); i++)
{
xfree(manuallinks[i].name);
}
- xfree(manuallinks);
- manuallinks = 0;
- ManualLinks = 0;
+ manuallinks.clear();
selected = -1;
}
}
@@ -465,7 +462,7 @@
manualpos = 0;
manual_free_buffers();
manual = (char**)xmalloc(sizeof(char *));
- manuallinks = (manuallink*)xmalloc(sizeof(manuallinks));
+ manuallinks.clear();
manual[ManualLines] = (char*)xmalloc(1024);
/* we read until eof */
@@ -547,7 +544,10 @@
void
sort_manuallinks_from_current_line(long startlink, long endlink)
{
+/* Can't do this with a std::vector. FIXME */
+#if 0
qsort(manuallinks + startlink, endlink - startlink, sizeof(manuallink), compare_manuallink);
+#endif
}
@@ -559,7 +559,7 @@
int tmpcnt = strlen(tmp) + 1;
char *link = tmp;
char *urlstart, *urlend;
- long initialManualLinks = ManualLinks;
+ long initialManualLinks = manuallinks.size();
int i, b;
/******************************************************************************
* handle url refrences *
@@ -569,60 +569,61 @@
{
/* always successfull */
urlend = findurlend(urlstart);
- manuallinks = (manuallink*)xrealloc(manuallinks, sizeof(manuallink) *(ManualLinks + 3));
- manuallinks[ManualLinks].line = ManualLines;
- manuallinks[ManualLinks].col = urlstart - tmp;
- strcpy(manuallinks[ManualLinks].section, "HTTPSECTION");
- manuallinks[ManualLinks].section_mark = HTTPSECTION;
- manuallinks[ManualLinks].name = (char*)xmalloc(urlend - urlstart + 10);
- strncpy(manuallinks[ManualLinks].name, urlstart, urlend - urlstart);
- manuallinks[ManualLinks].name[urlend - urlstart] = 0;
- if (ishyphen(manuallinks[ManualLinks].name[urlend - urlstart - 1]))
- manuallinks[ManualLinks].carry = 1;
+ manuallink my_link;
+ my_link.line = ManualLines;
+ my_link.col = urlstart - tmp;
+ strcpy(my_link.section, "HTTPSECTION");
+ my_link.section_mark = HTTPSECTION;
+ my_link.name = (char*)xmalloc(urlend - urlstart + 10);
+ strncpy(my_link.name, urlstart, urlend - urlstart);
+ my_link.name[urlend - urlstart] = 0;
+ if (ishyphen(my_link.name[urlend - urlstart - 1]))
+ my_link.carry = 1;
else
- manuallinks[ManualLinks].carry = 0;
- ManualLinks++;
+ my_link.carry = 0;
+ manuallinks.push_back(my_link);
}
urlend = tmp;
while ((urlstart = strstr(urlend, "ftp://")) != NULL)
{
/* always successfull */
urlend = findurlend(urlstart);
- manuallinks = (manuallink*)xrealloc(manuallinks, sizeof(manuallink) *(ManualLinks + 3));
- manuallinks[ManualLinks].line = ManualLines;
- manuallinks[ManualLinks].col = urlstart - tmp;
- strcpy(manuallinks[ManualLinks].section, "FTPSECTION");
- manuallinks[ManualLinks].section_mark = FTPSECTION;
- manuallinks[ManualLinks].name = (char*)xmalloc(urlend - urlstart + 10);
- strncpy(manuallinks[ManualLinks].name, urlstart, urlend - urlstart);
- manuallinks[ManualLinks].name[urlend - urlstart] = 0;
- if (ishyphen(manuallinks[ManualLinks].name[urlend - urlstart - 1]))
- manuallinks[ManualLinks].carry = 1;
+ manuallink my_link;
+ my_link.line = ManualLines;
+ my_link.col = urlstart - tmp;
+ strcpy(my_link.section, "FTPSECTION");
+ my_link.section_mark = FTPSECTION;
+ my_link.name = (char*)xmalloc(urlend - urlstart + 10);
+ strncpy(my_link.name, urlstart, urlend - urlstart);
+ my_link.name[urlend - urlstart] = 0;
+ if (ishyphen(my_link.name[urlend - urlstart - 1]))
+ my_link.carry = 1;
else
- manuallinks[ManualLinks].carry = 0;
- ManualLinks++;
+ my_link.carry = 0;
+ manuallinks.push_back(my_link);
}
urlend = tmp;
while ((urlstart = findemailstart(urlend)) != NULL)
{
/* always successfull */
urlend = findurlend(urlstart);
- manuallinks = (manuallink*)xrealloc(manuallinks, sizeof(manuallink) *(ManualLinks + 3));
- manuallinks[ManualLinks].line = ManualLines;
- manuallinks[ManualLinks].col = urlstart - tmp;
- strcpy(manuallinks[ManualLinks].section, "MAILSECTION");
- manuallinks[ManualLinks].section_mark = MAILSECTION;
- manuallinks[ManualLinks].name = (char*)xmalloc(urlend - urlstart + 10);
- strncpy(manuallinks[ManualLinks].name, urlstart, urlend - urlstart);
- manuallinks[ManualLinks].name[urlend - urlstart] = 0;
- if (ishyphen(manuallinks[ManualLinks].name[urlend - urlstart - 1]))
- manuallinks[ManualLinks].carry = 1;
+ manuallink my_link;
+ my_link.line = ManualLines;
+ my_link.col = urlstart - tmp;
+ strcpy(my_link.section, "MAILSECTION");
+ my_link.section_mark = MAILSECTION;
+ my_link.name = (char*)xmalloc(urlend - urlstart + 10);
+ strncpy(my_link.name, urlstart, urlend - urlstart);
+ my_link.name[urlend - urlstart] = 0;
+ if (ishyphen(my_link.name[urlend - urlstart - 1]))
+ my_link.carry = 1;
else
- manuallinks[ManualLinks].carry = 0;
+ my_link.carry = 0;
/* there should be a dot in e-mail domain */
- if (strchr(manuallinks[ManualLinks].name, '.') != NULL)
- ManualLinks++;
+ if (strchr(my_link.name, '.') != NULL) {
+ manuallinks.push_back(my_link);
+ }
}
/******************************************************************************
* handle normal manual refrences -- reference(section) *
@@ -695,23 +696,23 @@
break;
}
- manuallinks = (manuallink*)xrealloc(manuallinks, sizeof(manuallink) *(ManualLinks + 3));
- manuallinks[ManualLinks].line = ManualLines;
- manuallinks[ManualLinks].col = i;
+ manuallink my_link;
+ my_link.line = ManualLines;
+ my_link.col = i;
if (LongManualLinks)
{
for (b = 1; link[b] != ')'; b++)
- manuallinks[ManualLinks].section[b - 1] = tolower(link[b]);
- manuallinks[ManualLinks].section[b - 1] = 0;
+ my_link.section[b - 1] = tolower(link[b]);
+ my_link.section[b - 1] = 0;
}
else
{
- manuallinks[ManualLinks].section[0] = link[1];
- manuallinks[ManualLinks].section[1] = 0;
+ my_link.section[0] = link[1];
+ my_link.section[1] = 0;
}
- manuallinks[ManualLinks].section_mark = 0;
- manuallinks[ManualLinks].name = (char*)xmalloc((breakpos - i) + 10);
- strcpy(manuallinks[ManualLinks].name, tmp + i);
+ my_link.section_mark = 0;
+ my_link.name = (char*)xmalloc((breakpos - i) + 10);
+ strcpy(my_link.name, tmp + i);
tmp[breakpos] = tempchar;
/* check whether this is a carry'ed entry(i.e. in the
@@ -724,11 +725,11 @@
break;
}
if (b >= 0)
- manuallinks[ManualLinks].carry = 0;
+ my_link.carry = 0;
else
- manuallinks[ManualLinks].carry = carry;
+ my_link.carry = carry;
/* increase the number of entries */
- ManualLinks++;
+ manuallinks.push_back(my_link);
} /*... if (in man links) */
xfree((void *) p_t1);
}
@@ -739,11 +740,12 @@
{
break;
}
- }
- /* do this line until strchr() won't find a '(' in string */
- while (link != NULL);
- if (initialManualLinks != ManualLinks)
- sort_manuallinks_from_current_line(initialManualLinks, ManualLinks);
+ } while (link != NULL);
+ /* do this loop until strchr() won't find a '(' in string */
+
+ /* FIXME: Doesn't work with std::vector */
+ if (initialManualLinks != manuallinks.size())
+ sort_manuallinks_from_current_line(initialManualLinks, manuallinks.size());
}
/* viewer function. Handles keyboard actions--main event loop */
@@ -825,14 +827,14 @@
if ((key == keys.goto_1) ||
(key == keys.goto_2))
{
- manuallinks = (manuallink*)xrealloc(manuallinks,(ManualLinks + 1) *(sizeof(manuallink) + 3));
+ manuallink my_link;
/* get user's value */
attrset(bottomline);
move(maxy - 1, 0);
echo();
curs_set(1);
- manuallinks[ManualLinks].name = getstring(_("Enter manual name: "));
+ my_link.name = getstring(_("Enter manual name: "));
curs_set(0);
noecho();
move(maxy - 1, 0);
@@ -845,13 +847,13 @@
#endif
attrset(normal);
- manuallinks[ManualLinks].carry = 0;
- manuallinks[ManualLinks].section_mark = 0;
- strcpy(manuallinks[ManualLinks].section, " ");
- manuallinks[ManualLinks].line = -1;
- manuallinks[ManualLinks].col = -1;
- ManualLinks++;
- return ManualLinks - 1;
+ my_link.carry = 0;
+ my_link.section_mark = 0;
+ strcpy(my_link.section, " ");
+ my_link.line = -1;
+ my_link.col = -1;
+ manuallinks.push_back(my_link);
+ return manuallinks.size() - 1;
}
/*====================================================*/
if ((key == keys.goline_1) ||
@@ -1099,7 +1101,7 @@
if (manualpos >= 1)
manualpos--;
/* and scan for selected again :) */
- for (i = 0; i < ManualLinks; i++)
+ for (i = 0; i < manuallinks.size(); i++)
{
if (manuallinks[i].line == manualpos)
{
@@ -1116,7 +1118,7 @@
manualpos = ManualLines -(maxy - 1);
if (manualpos < 0)
manualpos = 0;
- selected = ManualLinks - 1;
+ selected = manuallinks.size() - 1;
}
/*=====================================================*/
if ((key == keys.nextnode_1) ||
@@ -1156,12 +1158,12 @@
else if (ManualLines -(maxy - 1) >= 1)
{
manualpos = ManualLines -(maxy - 1);
- selected = ManualLinks - 1;
+ selected = manuallinks.size() - 1;
}
else
{
manualpos = 0;
- selected = ManualLinks - 1;
+ selected = manuallinks.size() - 1;
}
}
/*=====================================================*/
@@ -1193,8 +1195,8 @@
if ((key == keys.down_1) || (key == keys.down_2))
{
selectedchanged = 0;
- if (selected < ManualLinks)
- for (i = selected + 1; i < ManualLinks; i++)
+ if (selected < manuallinks.size())
+ for (i = selected + 1; i < manuallinks.size(); i++)
{
if ((manuallinks[i].line >= manualpos) &&
(manuallinks[i].line < manualpos +(maxy - 2)))
@@ -1208,8 +1210,8 @@
{
if (manualpos < ManualLines -(maxy - 1))
manualpos++;
- if (selected < ManualLinks)
- for (i = selected + 1; i < ManualLinks; i++)
+ if (selected < manuallinks.size())
+ for (i = selected + 1; i < manuallinks.size(); i++)
{
if ((manuallinks[i].line >= manualpos) &&
(manuallinks[i].line < manualpos +(maxy - 2)))
@@ -1314,7 +1316,7 @@
}
}
if (!done)
- for (i = selected; i < ManualLinks; i++)
+ for (i = selected; i < manuallinks.size(); i++)
{
if (manuallinks[i].line == mouse.y + manualpos - 1)
{
@@ -1355,7 +1357,7 @@
}
}
if (!done)
- for (i = selected; i < ManualLinks; i++)
+ for (i = selected; i < manuallinks.size(); i++)
{
if (manuallinks[i].line == mouse.y + manualpos - 1)
{
@@ -1402,7 +1404,7 @@
rescan_selected()
{
int i;
- for (i = 0; i < ManualLinks; i++)
+ for (i = 0; i < manuallinks.size(); i++)
{
if ((manuallinks[i].line >= manualpos) &&
(manuallinks[i].line < manualpos +(maxy - 1)))
@@ -1581,7 +1583,7 @@
{
int i;
/* scan through the visible objects */
- for (i = 0; i < ManualLinks; i++)
+ for (i = 0; i < manuallinks.size(); i++)
{
/* if the object is on the current screen */
if ((manuallinks[i].line >= manualpos) &&
More information about the Pinfo-devel
mailing list