SCRN *clearmem(SCRN *lp,int cnt) { register unsigned i; SCRN *cp; if(cnt == EOF) { i= 0; --i; } else i= cnt; while(i-- && lp != (SCRN *)NULL) { strfree(lp->buffer); cp= lp; lp= lp->fwd; linefree(cp); } return(lp); }
void CTextView::OnEditAsciiart() { CAsciiArtDlg dlg; dlg.m_strText = App.m_strAsciiArtText; dlg.m_iLayout = App.m_iAsciiArtLayout; dlg.m_strFont = App.m_strAsciiArtFont; if (dlg.DoModal () != IDOK) return; // remember text but don't save in registry App.m_strAsciiArtText = dlg.m_strText; // remember layout in registry if (dlg.m_iLayout != (int) App.m_iAsciiArtLayout) App.db_write_int ("prefs", "AsciiArtLayout", dlg.m_iLayout); App.m_iAsciiArtLayout = dlg.m_iLayout; // remember font in registry if (dlg.m_strFont != App.m_strAsciiArtFont) App.db_write_string ("prefs", "AsciiArtFont", dlg.m_strFont); App.m_strAsciiArtFont = dlg.m_strFont; CString str = dlg.m_strText; switch (dlg.m_iLayout) { case 1: // full smush smushmode = SM_SMUSH; smushoverride = SMO_FORCE; break; case 2: // kern smushmode = SM_KERN; smushoverride = SMO_YES; break; case 3: // full width smushmode = 0; smushoverride = SMO_YES; break; case 4: // overlap smushmode = SM_SMUSH; smushoverride = SMO_YES; break; default: // default is normal smush smushoverride = SMO_NO; break; } // end of switch inchr c; int i; try { getparams (); readfont (dlg.m_strFont); linealloc(); for (i = 0; i < str.GetLength (); i++) { c = str [i]; if (isascii(c)&&isspace(c)) { c = (c=='\t'||c==' ') ? ' ' : '\n'; } if ((c>'\0' && c<' ' && c!='\n') || c==127) continue; addchar (c); } // end of processing each character for (i=0;i<charheight;i++) { CString strLine = Replace (outputline[i], hardblank, " "); GetEditCtrl ().ReplaceSel (CFormat ("%s%s", (LPCTSTR) strLine, ENDLINE), true); } linefree (); fontfree (); } catch (CException* e) { e->ReportError(); e->Delete(); linefree (); // free memory used fontfree (); } }