int rtt_view_buffer( menu_ctx parent_ctx, pwr_tObjid objid, char *filename, char *inbuff, char *intitle, int type) { int sts; sts = rtt_view( parent_ctx, filename, inbuff, intitle, type); return sts; }
int rtt_crr_code( char* filename, char* str, int brief, int func, int case_sensitive) { pwr_tFileName default_filename; FILE* file; char line[500]; char tst_line[500]; pwr_tAName object; pwr_tOName objname; int spaces; int first; int sts; char* s; int signalcount = 0; char filestr[80]; int lines; char* buff; pwr_tVolumeId volid; pwr_tObjid objid; int buffcnt = 0; int len; int i; int objname_written; int hit; char* tst_char; /* Open file */ if (filename == NULL) { sts = gdh_GetNodeObject(0, &objid); if (EVEN(sts)) return sts; volid = objid.vid; sprintf(default_filename, "%srtt_crrc_%s.dat", rtt_pwr_dir("pwrp_load"), rtt_VolumeIdToStr(volid)); rtt_get_defaultfilename(default_filename, filestr, NULL); file = fopen(filestr, "r"); } else { rtt_get_defaultfilename(filename, filestr, ".lis"); file = fopen(filestr, "r"); } if (file == 0) { rtt_message('E', "Unable to open file"); return RTT__NOPICTURE; } /* Case sensitive if any lowercase */ if (!case_sensitive) for (s = str; *s != 0; s++) { if (!isupper(*s)) case_sensitive = 1; } buff = calloc(1, CRR_BUFF_SIZE); if (!buff) { rtt_message('E', "Unable to allocate memory"); fclose(file); return RTT__NOPICTURE; } /* Get the hierarchy */ while (!str_StartsWith(line, " _Obj_ ")) { sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; } first = 1; while (1) { strcpy(objname, &line[7]); for (s = objname; !(*s == 32 || *s == 9 || *s == 0); s++) ; *s = 0; sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); objname_written = 0; while (!str_StartsWith(line, " _Obj_ ")) { if (!case_sensitive) rtt_toupper(tst_line, line); else strcpy(tst_line, line); hit = 0; if (!func) { if (strstr(tst_line, str) != 0) hit = 1; } else { if ((s = strstr(tst_line, str)) != 0) { hit = 1; /* Check char after */ tst_char = s + strlen(str); if (isalpha(*tst_char) || isdigit(*tst_char) || *tst_char == '_') hit = 0; /* Check char before */ if (s != tst_line) { tst_char = s - 1; if (isalpha(*tst_char) || isdigit(*tst_char) || *tst_char == '_') hit = 0; } } } if (hit) { /* Hit, print this object */ if (signalcount == 0) { rtt_clear_screen(); if (func) buffcnt = sprintf(buff, "Crossreferens list Function \"%s\"\n\n", str); else buffcnt = sprintf(buff, "Crossreferens list String \"%s\"\n\n", str); } signalcount++; if (buffcnt > CRR_BUFF_SIZE - 100) { buffcnt += sprintf( buff + buffcnt, "RTT-E-QUOTAEXC, Crossref quota exceeded"); goto finish; } if (!objname_written) { len = sprintf(buff + buffcnt, " %s", objname); objname_written = 1; } else len = 0; for (i = len; i < 45; i++) { strcat(buff + buffcnt + len, " "); len++; } buffcnt += len; buffcnt += sprintf(buff + buffcnt, " \"%s\"\n", line); if (brief) { while (!str_StartsWith(line, " _Obj_ ")) { sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; } } else { sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; } } else { sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; } } } finish: fclose(file); if (signalcount > 0) { sts = rtt_view(0, 0, buff, "Crossreference list", RTT_VIEWTYPE_BUF); return sts; } else { if (func) rtt_message('E', "String not found"); else rtt_message('E', "Function not found"); return RTT__NOPICTURE; } }
int rtt_crr_object(char* filename, char* objectname) { pwr_tFileName default_filename; FILE* file; char line[200]; int object_spaces; char object[80]; pwr_tOName objname; char show_objname[80]; int spaces; int first; int sts; char* s; int wildcard; int signalcount = 0; pwr_tFileName filestr; int lines; char* buff; pwr_tVolumeId volid; pwr_tObjid objid; int buffcnt = 0; rtt_toupper(objectname, objectname); /* Check if wildcard */ s = strchr(objectname, '*'); if (s == 0) wildcard = 0; else wildcard = 1; /* Open file */ if (filename == NULL) { /* Open file, first get the volume id */ if (!wildcard) { sts = gdh_NameToObjid(objectname, &objid); if (EVEN(sts)) { rtt_message('E', "Object not found"); return RTT__NOPICTURE; } volid = objid.vid; } else { sts = gdh_GetNodeObject(0, &objid); if (EVEN(sts)) return sts; volid = objid.vid; } sprintf(default_filename, "%srtt_crro_%s.dat", rtt_pwr_dir("pwrp_load"), rtt_VolumeIdToStr(volid)); rtt_get_defaultfilename(default_filename, filestr, NULL); file = fopen(filestr, "r"); } else { rtt_get_defaultfilename(filename, filestr, ".lis"); file = fopen(filestr, "r"); } if (file == 0) { rtt_message('E', "Unable to open file"); return RTT__NOPICTURE; } buff = calloc(1, CRR_BUFF_SIZE); if (!buff) { rtt_message('E', "Unable to allocate memory"); fclose(file); return RTT__NOPICTURE; } /* Get the object */ sts = rtt_get_signal_line(file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; object_spaces = spaces; first = 1; while (1) { if ((s = strchr(object, ':'))) strcpy(objname, s + 1); else strcpy(objname, object); strcpy(show_objname, objname); rtt_toupper(objname, objname); sts = rtt_wildcard(objectname, objname); if (sts) { pwr_tAName subname; strcpy(subname, objectname); strcat(subname, ".*"); sts = rtt_wildcard(subname, objname); } if (!sts) { /* Hit, print this object */ if (signalcount == 0) { rtt_clear_screen(); buffcnt = sprintf(buff, "Crossreferens list %s\n\n", show_objname); } signalcount++; sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; while (spaces > object_spaces) { str_trim(line, line); if (buffcnt > CRR_BUFF_SIZE - 100) { buffcnt += sprintf( buff + buffcnt, "RTT-E-QUOTAEXC, Crossref quota exceeded"); goto finish; } buffcnt += sprintf(buff + buffcnt, " %s\n", line); sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; } } else { if (!wildcard && signalcount) goto finish; sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; } while (spaces != object_spaces) { sts = rtt_get_signal_line( file, line, sizeof(line), &spaces, object, &lines); if (EVEN(sts)) goto finish; } } finish: fclose(file); if (signalcount > 0) { sts = rtt_view(0, 0, buff, "Crossreference list", RTT_VIEWTYPE_BUF); return sts; } else { rtt_message('E', "Object not found"); return RTT__NOPICTURE; } }