- rows=(len/DUMP_WIDTH);
- if ((rows*DUMP_WIDTH)<len)
- rows++;
- for(i=0;i<rows;i++) {
- buf[0]='\0'; /* start with empty string */
- sprintf(tmp,"%04x - ",i*DUMP_WIDTH);
- strcpy(buf,tmp);
- for(j=0;j<DUMP_WIDTH;j++) {
- if (((i*DUMP_WIDTH)+j)>=len) {
- strcat(buf," ");
- } else {
- ch=((unsigned char)*((char *)(s)+i*DUMP_WIDTH+j)) & 0xff;
- sprintf(tmp,"%02x%c",ch,j==7?'-':' ');
- strcat(buf,tmp);
- }
- }
- strcat(buf," ");
- for(j=0;j<DUMP_WIDTH;j++) {
- if (((i*DUMP_WIDTH)+j)>=len)
- break;
- ch=((unsigned char)*((char *)(s)+i*DUMP_WIDTH+j)) & 0xff;
- sprintf(tmp,"%c",((ch>=' ')&&(ch<='~'))?ch:'.');
- strcat(buf,tmp);
- }
- strcat(buf,"\n");
- /* if this is the last call then update the ddt_dump thing so that
- * we will move the selection point in the debug window
- */
- ret+=BIO_write(bio,(char *)buf,strlen(buf));
- }
+ if (indent < 0)
+ indent = 0;
+ if (indent)
+ {
+ if (indent > 128) indent=128;
+ memset(str,' ',indent);
+ }
+ str[indent]='\0';
+
+ dump_width=DUMP_WIDTH_LESS_INDENT(indent);
+ rows=(len/dump_width);
+ if ((rows*dump_width)<len)
+ rows++;
+ for(i=0;i<rows;i++)
+ {
+ buf[0]='\0'; /* start with empty string */
+ BUF_strlcpy(buf,str,sizeof buf);
+ BIO_snprintf(tmp,sizeof tmp,"%04x - ",i*dump_width);
+ BUF_strlcat(buf,tmp,sizeof buf);
+ for(j=0;j<dump_width;j++)
+ {
+ if (((i*dump_width)+j)>=len)
+ {
+ BUF_strlcat(buf," ",sizeof buf);
+ }
+ else
+ {
+ ch=((unsigned char)*(s+i*dump_width+j)) & 0xff;
+ BIO_snprintf(tmp,sizeof tmp,"%02x%c",ch,
+ j==7?'-':' ');
+ BUF_strlcat(buf,tmp,sizeof buf);
+ }
+ }
+ BUF_strlcat(buf," ",sizeof buf);
+ for(j=0;j<dump_width;j++)
+ {
+ if (((i*dump_width)+j)>=len)
+ break;
+ ch=((unsigned char)*(s+i*dump_width+j)) & 0xff;
+#ifndef CHARSET_EBCDIC
+ BIO_snprintf(tmp,sizeof tmp,"%c",
+ ((ch>=' ')&&(ch<='~'))?ch:'.');
+#else
+ BIO_snprintf(tmp,sizeof tmp,"%c",
+ ((ch>=os_toascii[' '])&&(ch<=os_toascii['~']))
+ ? os_toebcdic[ch]
+ : '.');
+#endif
+ BUF_strlcat(buf,tmp,sizeof buf);
+ }
+ BUF_strlcat(buf,"\n",sizeof buf);
+ /* if this is the last call then update the ddt_dump thing so
+ * that we will move the selection point in the debug window
+ */
+ ret+=cb((void *)buf,strlen(buf),u);
+ }