CIS 488 Programming Assignment 14 Using Borland's

Total Page:16

File Type:pdf, Size:1020Kb

CIS 488 Programming Assignment 14 Using Borland's CIS 488 Programming Assignment 14 Using Borland’s OWL Introduction The purpose of this programming assignment is to give you practice developing a Windows program using Borland Object Windows Library, Version 2.0. Assignment In this assignment you will convert your Windows program to Borland OWL. You will define 1) a C++ class representing the application, 2) a class implementing your main window, 3) classes implementing your dialog boxes, and 4) redefine the struct's used to transfer data between your main window and your dialog boxes. To keep the assignment as simple as possible, start with version 8 or version 9 of your program. In other words, do not start with the MDI version of your program. Note: Borland's Turbo C++ will not build a 32 bit version. Method Copy all the files for Assignment 8, or all the files that make the .EXE of Assignment 9, to corresponding files for this assignment and change all occurrences of "08" or "09" to "14". If you decide to use Assignment 9 as the base for this one, you will not have to copy the files that compose your .DLL, since you will use it as is and thus it will remain unchanged. Important: Make sure your source files have the extention .CPP so the compiler will recognize them as C++ files. Recommendation: Do not attempt to transform the application and window procedure code by stepwise modification. You will be overwhelmed with errors and confusion. Instead, create a new source file PROG14.CPP and develop the program step by step as was done in class and the notes. As needed, copy code from Assignment 8 (or 9) files and add it to the C++ code in PROG14.CPP. You will not have to modify such copied code if you do this right. The final program will be a mixture of C++ code and C code. The C code will be compiled by the C++ compiler as is. Step 1: Derive an Application Class Derive a class, TProg14App, from the OWL class TApplication. It should have a public constructor member function and redefine the virtual void member function InitMainWindow. The redefined function InitMainWindow should create a main window using the new operator. Convert your WinMain function to an OwlMain function that defines and runs an instance of TProg14App. To test at this time, the main window should be an instance of a window class that is already defined, e.g., an OWL window class. Step 2: Derive a Main Window Class Derive a class, TMainWindow, from the OWL class TWindow. It should 1) have a public constructor, 2) redefine the public virtual void functions Paint and SetupWindow, 3) define a public virtual void function CMXxxxx to respond to each command message, and 4) declare a response table. In addition, the class TMainWindow should have protected or private data members to hold hText, the handle to the displayed text, ef, the ENUMFACE struct and curFace, the current font selection. Finally, the class should define the following two member functions to simplify others: virtual BOOL PrintWindow() { return ::PrintWindow( HWindow, GetApplication()->hInstance, hText, ef.faceName[curFace] ); } and void DoFontItem( int i ) { curFace = i; Invalidate( TRUE ); } Important: Put the class declaration in your header file and the implementation in TOPWIN14.CPP. Put any data definitions needed by the class declaration in the header file also. The member function PrintWindow is what is called a wrapper for the non member function of the same name. The operator :: ensures the non member function is called. The member function DoFontItem should be either private or protected and simplifies the member functions responding to font selection menu choices. The member function SetupWindow is called to initialize the TMainWindow C++ object after Windows has created the visible window on screen. It has the following form void TMainWindow::SetupWindow() { TWindow::SetupWindow(); HANDLE hInst = GetApplication()->hInstance; 2 ... } You should load the text resource, make the font menu and initialize the current font selection in this function. Each command message response function is declared in the class as virtual void CMXxxxx(); and defined this way for one line bodies void TMainWindow::CMXxxxx() { ... } or this way for longer bodies void TMainWindow::CMXxxxx() { ... } Important note: In OWL we cannot define a member function to respond to a range of wParam values. Thus you must define a command message response function for each of the 20 possible font menu choices. You can test your program at this stage if you are careful not to use any commands that would activate dialog boxes. Step 3: Derive Dialog Box Classes For each of your dialog boxes that exchange data with the main window, derive a class TXxxxxDlg from the OWL class TDialog. Each class should have a public constructor and a pointer data member for pointing to each dialog control object that, to or from which, you will need to transfer data. It will also declare a response table and message response functions for any messages it must process. The constructor will use the new operator to create a control object for each pointer defined in the class. Any other dialog initialization should be done in a virtual void function SetupWindow that is a member of the dialog class. Dialogs that have scrollbars should have the following private member function defined: void SetPosLabel( int i ) { SetDlgItemInt( HWindow, IDC_VALUE1+i, scr[i]->GetPosition(), FALSE ); } Notifications from scroll bars are handled by a response function declared as follows: 3 virtual void IDScrollBar1Msg(); The response function has a response table entry like this: EV_CHILD_NOTIFY( IDC-SCROLL1, UINT_MAX, IDScrollBar1Msg ) where the constant UINT_MAX sends all notifications from the scroll bar to the response function. The body of a scroll bar response function simply calls the function SetPosLabel to keep its label up to date with its position. All other scroll bar actions are handled by OWL. Step 4: Transfer Dialog Data Following the method discussed in class, define structs to hold dialog data and arrange for their automatic transfer with the following statement in the constructor: SetTransferBuffer( &xdd ); A dialog containing a list box must use one of two methods to transfer the list box data. Either 1) define a constructor to initialize the PTListBoxData pointer in the dialog's data struct, or 2) initialize the list box in a redefined SetupWindow member function and retrieve its selection and contents if appropriate in a member function that responds to the OK button press. A dialog that has three scroll bars would use the following definitions: struct XxxxxDlgData { TScrollBarData scr[3]; }; XxxxxDlgData xdd = {{ { 0, 255, 127 }, { 0, 255, 127 }, { 0, 255, 127 } }}; Important note: the double curly braces {{ ... }} in the above example are necessary. Single braces will produce an error. The outer pair of braces surrounds the data initializing the struct while the inner pair of braces surrounds the data initializing the array. The main window executes the dialogs as discussed in class. Step 5: Repaint on Window Resize You may have noticed during testing that if you resize the main window, the text is not all redrawn to fit the new window size. This happens because OWL registers your window classes automatically and does not include the class style flags that repaint a window when 4 it is resized. To remedy this, we must do two things: make sure our window has a unique class name and that it is registered with the style flags that cause it to be redrawn. Add the following member function overrides to your main window class declaration: virtual char far* GetClassName() { return "Prog14Window"; } virtual void GetWindowClass( WNDCLASS& wc ) { TWindow::GetWindowClass( wc ); wc.style |= (CS_HREDRAW | CS_VREDRAW); } Make sure these functions are protected members of the class. These functions override the OWL functions in class TWindow. The function GetClassName assigns the name "Prog14Window" to the new window class. The function GetWindowClass retrieves the WNDCLASS struct used to register the window class. Before it returns it adds to wc.style the flags CS_HREDRAW | CS_VREDRAW that are needed to make the window class redraw its windows when they are resized. Report The report for this assignment consists of the following items: · Title Page · Annotated and Highlighted Program Listings · Sample Printed Output from the Window · Sample(s) of the Program on Screen (Use [Shift | Ctrl | Alt -] PrintScrn to clipboard, paste to word processor.) Important: · use a highlighter to mark the differences between this assignment and the previous one, and · use only 8.5 by 11" paper with smooth edges. 5.
Recommended publications
  • Mystic Microsoft
    Kraig Brockschmidt Mystic Microsoft A Journey of Transformation in the Halls of High Technology Kraig Brockschmidt You’re invited to copy, print, and share this book… It’s free and it’s legal Mystic Microsoft is published under the Creative Commons Attribution-Noncommercial- No Derivative Works 2.5 License (see next page) This means you may freely and legally share, copy, distribute, and display this book without the need to worry about lawyers, royalties, and all that sort of stuff. This book’s website (www.mysticmicrosoft.com) even gives you all the files you need to print and bind your own copies. Of course, you are not allowed to make any changes to this work, nor are you allowed to use it for commercial purposes or profit from it in any way without permission from the author. As this book is offered freely, readers are encouraged, though not required, to reciprocate in two ways: (1) Express gratitude to the author by making a monetary contribution to the author’s work and/or writing a positive testimonial about the book with permission to use your words in promotional activities. See www.mysticmicrosoft.com for details or write to the author’s address on the next page. (2) “Pay it forward” by sharing the book with others and/or making a gift of money or volunteered time to a worthy cause of your choice. So that these gifts do not go unnoticed, please inform the author of your gifts via www.mysticmicrosoft.com (or regular mail) so the website can show the positive contributions that this work has inspired.
    [Show full text]
  • Evolution and Composition of Object-Oriented Frameworks
    Evolution and Composition of Object-Oriented Frameworks Michael Mattsson University of Karlskrona/Ronneby Department of Software Engineering and Computer Science ISBN 91-628-3856-3 © Michael Mattsson, 2000 Cover background: Digital imagery® copyright 1999 PhotoDisc, Inc. Printed in Sweden Kaserntryckeriet AB Karlskrona, 2000 To Nisse, my father-in-law - who never had the opportunity to study as much as he would have liked to This thesis is submitted to the Faculty of Technology, University of Karlskrona/Ronneby, in partial fulfillment of the requirements for the degree of Doctor of Philosophy in Engineering. Contact Information: Michael Mattsson Department of Software Engineering and Computer Science University of Karlskrona/Ronneby Soft Center SE-372 25 RONNEBY SWEDEN Tel.: +46 457 38 50 00 Fax.: +46 457 27 125 Email: [email protected] URL: http://www.ipd.hk-r.se/rise Abstract This thesis comprises studies of evolution and composition of object-oriented frameworks, a certain kind of reusable asset. An object-oriented framework is a set of classes that embodies an abstract design for solutions to a family of related prob- lems. The work presented is based on and has its origin in industrial contexts where object-oriented frameworks have been developed, used, evolved and managed. Thus, the results are based on empirical observations. Both qualitative and quanti- tative approaches have been used in the studies performed which cover both tech- nical and managerial aspects of object-oriented framework technology. Historically, object-oriented frameworks are large monolithic assets which require several design iterations and are therefore costly to develop. With the requirement of building larger applications, software engineers have started to compose multiple frameworks, thereby encountering a number of problems.
    [Show full text]
  • Essential Pascal
    Marco Cantù Essential Pascal 2nd Edition, March 2003 (version 2.01) APOLLO, THE GOD WORSHIPED AT DELPHI, IN AN ITALIAN 17TH CENTURY FRESCO. Essential Pascal [Copyright 1995-2003 Marco Cantù] www.marcocantu.com/epascal 1 Introduction he first few editions of Mastering Delphi, the best selling Delphi book I've written, provided an introduction to the Pascal language in Delphi. Due to space constraints and T because many Delphi programmers look for more advanced information, in the latest edition this material was completely omitted. To overcome the absence of this information, I've started putting together this ebook, titled Essential Pascal. This is a detailed book on Pascal, which for the moment will be available for free on my web site (I really don't know what will happen next, I might even find a publisher). This is a work in progress, and any feedback is welcome. The first complete version of this book, dated July '99, has been published on the Delphi 5 Companion CD. Note to the Second Edition After a few years (in the early 2003), the book had a complete revision, trying to refocus it even more on the core features of the Pascal language. Alongside, the book covers the language from the perspective of the Delphi for Windows programmer, but also of the Kylix and Delphi for .NET programmer. Differences among these different versions of the language will be mentioned. This change in focus (not only Delphi with the VCL library) was another reason to change most of the examples from visual ones to console based ones – something I plan doing but that I still haven't done.
    [Show full text]
  • La Guía De Delphi Por Francisco Charte
    La guía de Delphi por Francisco Charte © Danysoft 2012 2 - DERECHOS RESERVADOS El contenido de esta publicación tiene todos los derechos reservados, por lo que no se puede reproducir, transcribir, transmitir, almacenar en un sistema de recuperación o traducir a otro idioma de ninguna forma o por ningún medio mecánico, manual, electrónico, magnético, químico, óptico, o de otro modo. La persecución de una reproducción no autorizada tiene como consecuencia la cárcel y/o multas. LIMITACIÓN DE LA RESPONSABILIDAD Tanto el autor como en Danysoft hemos revisado el texto para evitar cualquier tipo de error, pero no podemos prometerle que el libro esté siempre libre de errores. Por ello le rogamos nos remita por e-mail sus comentarios sobre el libro a [email protected] DESCUENTOS ESPECIALES Recuerde que Danysoft ofrece descuentos especiales a centros de formación y en adquisiciones por volumen. Para más detalles, consulte con Danysoft. MARCAS REGISTRADAS Todos los productos y marcas se mencionan únicamente con fines de identificación y están registrados por sus respectivas compañías. Autor: Francisco Charte Publicado en castellano por Danysoft Avda. de la Industria, 4 Edif. 1 3º 28108 Alcobendas, Madrid. España. 902 123146 | www.danysoft.com ISBN: 978-84-939910-1-2 Depósito Legal: M-9679-2012 Por acuerdo entre el Autor y Editor, este libro se ofrece sin coste. El contenido no se puede modificar, ni obtener beneficio por su redistribución, ni eliminar la información del autor y editor del mismo. IMPRESO EN ESPAÑA © Danysoft | Madrid, 2012 La guía de DELPHI por Francisco Charte Prólogo - 3 Prólogo A mis hijos: David y Alejandro A mi alma gemela en esta travesía: María Jesús El libro que tienes en tus manos ha sido escrito pensando en los distintos tipos de desarrolladores que podrían estar interesados en la última versión de la herramienta estrella de Embarcadero: Delphi XE2.
    [Show full text]
  • 14. Advanced Windows Concepts
    • multi-tasking or multi-threading of a single application, which 14. Advanced Windows Concepts allow parts of an application to still move ahead with useful This section will survey some advanced concepts used in MS- computations even though other parts of the same application Windows programming. First, we will look at a number of are blocked. forms of Inter-Process Communication (IPC). IPC is the generic Optional Readings: the rest of the chapters from [Shildt95] term used for passing data between different processes, programs, or threads: • The clipboard can be used to cut and paste not only within one application, but between applications. • Drag-And-Drop is a feature for dragging a file to an application window or icon, and having the destination application know what to do with it (and if not running, to be started to deal with it). • Dynamic Data Exchange (DDE) is a simple way for a data server process to allow access by client processes. • Object Linking and Embedding (OLE) has developed past simple embedding another application’s objects (e.g. diagrams or tables) in a document. • Component Object Model (COM) is the underlying mechanism by which the sophisticated features of OLE can work; in fact COM has recently been extended to provide inter- communication between application running on different computers (‘Distributed COM’). We will also briefly look into Dynamic Link Libraries, which allow run-time linking to application or system procedure libraries. Finally, if time permits, we may discuss: • how some of the complications of Windows programming can be abstracted and simplified using a C++ OO class library of various window and control types.
    [Show full text]
  • Essential Delphi – Copyright 1996-2002 Marco Cantù – 1
    Marco Cantù's Essential Delphi – Copyright 1996-2002 Marco Cantù – www.marcocantu.com/edelphi 1 MMARCOARCO CCANTÙANTÙ''SS EESSENTIALSSENTIAL DDELPHIELPHI A Friendly Introductory Guide to Borland Delphi http://www.marcocantu.com/edelphi Copyright 1996-2002 Marco Cantù Revision 1.03 - April 13, 2002 Marco Cantù's Essential Delphi – Copyright 1996-2002 Marco Cantù – www.marcocantu.com/edelphi 2 INTRODUCTION fter the successful publishing of the e-book Essential Pascal (available on my web site at the address http://www.marcocantu.com/epascal), I decided to follow up with an Aintroduction to Delphi. Again most of the material you'll find here was in the first editions of my “printed” book Mastering Delphi, the best selling Delphi book I have written. Due to space constraints and because many Delphi programmers look for more advanced information, in the latest edition this material was completely omitted. To overcome the absence of this information, I have started putting together this second on- line book, titled Essential Delphi. Copyright The text and the source code of this book are copyrighted by Marco Cantù. Of course, you can use the programs and adapt them to your own needs with no limitation, only you are not allowed to use them in books, training material, and other copyrighted formats without my permission (or in case you are using limited portions, referring to the original). Feel free to link your site with this one, but please do not duplicate the material (on your web site, on a CD) as it is subject to frequent changes and updates. Passing a copy to a friend, occasionally, is certainly something you can do if you do not modify it in any way.
    [Show full text]
  • Lauren Bricker
    lauren at brickware dot com bricker at cs dot washington dot edu Lauren Bricker https://homes.cs.washington.edu/~bricker/ Education University of Washington Seattle, WA 1990 - 1998 Computer Science MS 1993, PhD 1998. Thesis: Cooperatively Controlled Objects in Support of Collaboration University of Michigan Ann Arbor, MI 1982 - 1985 Theoretical Mathematics and Pre-Medicine, B. S., Honors College Research and Teaching Interests I have a wide variety of interests in teaching and research, including Human Computer Interaction (HCI) including Computer Supported Cooperative Work (CSCW), Computer Supported Collaborative Learning (CSCL), Equitable and Active Computer Science Education, Educational Technology, Engineering principles, Rapid prototyping and 3D modeling and printing, and computer graphics and animation. Professional Experience University of Washington Seattle, WA 2017 – present Paul G Allen School of Computer Science and Engineering Computer Science Faculty Lecturer and K-12 Outreach • CSE 190Z – STARS CSE Workshops. STARS is a two-year program to support engineering and computer science students from underserved high schools as they transition and navigate the large required introductory courses such as Math, Chemistry, Physics, and Computer Science. o Autumn 2017, 2018, 2019 – STARS Pre-CSE problem solving course: Developed and taught the new STARS Pre-CSE course. The goal of the course was to allow students the time and space to practice essential skills required to be successful in CSE 142 (Computer Programming 1), including problem solving process, computational thinking, persistence, communication and collaboration, creativity as well as time management. Students use these skills as they learn the “just enough” basic programming in Java to design and develop a small project of their own in the 10-week course.
    [Show full text]
  • Genetic Algorithm Programming Environments
    Genetic Algorithm Programming Environments Jose Ribeiro Filho, Cesare Alippi and Philip Treleaven Department of Computer Science – University College London ABSTRACT Interest in Genetic algorithms is expanding rapidly. This paper reviews software environments for programming Genetic Algorithms (GAs). As background, we initially preview genetic algorithms' models and their programming. Next we classify GA software environments into three main categories: Application-oriented, Algorithm-oriented and Tool-Kits. For each category of GA programming environment we review their common features and present a case study of a leading environment. Keywords – Programming Environments, Genetic Algorithms. To appear in the IEEE COMPUTER Journal. Table of Contents 1. Introduction .............................................................................................................................. 3 1.1. Classes of Search Techniques..................................................................................... 3 1.2. Survey Structure........................................................................................................ 4 2. Genetic Algorithms ................................................................................................................... 6 2.1. Sequential GAs.......................................................................................................... 8 2.2. Parallel GAs .............................................................................................................. 10 3. Taxonomy
    [Show full text]
  • 31 Frameworks for Understanding
    31 31 Frameworks for Understanding It is unlikely that you will learn how to use a "framework class library" in any of your computer science courses at university. Frameworks don't possess quite the social cachet of "normal forms for relational databases", "NP complexity analysis", "LR grammars", "formal derivation of algorithms", "Z specification" and the rest. You might encounter "Design Patterns" (which relate to frameworks) in an advanced undergraduate or graduate level course; but, on the whole, most universities pay little regard to the framework-based development methodologies. However, if you intend to develop any substantial program on your personal computer, you should plan to use the framework class library provided with your development environment. As illustrated by the simple "RecordFile" framework presented in the last chapter, a framework class library will embody a model for a particular kind of program. Some of the classes in the framework are concrete classes that you can use as "off the shelf" components (things like the MenuWindow and NumberDialog classes in the RecordFile framework). More significant are the partially implemented abstract classes. These must be extended, through inheritance, to obtain the classes that are needed in an actual program. Of course, the framework-provided member functions already define many standard patterns of interactions among instances of these classes. Thus, in the RecordFile framework, most of the code needed to build a working program was already provided by the Application, Document, and Record classes along with helpers like RecordWindow. If you can exploit a framework, you can avoid the need to reimplement all the standard behaviours that its code embodies.
    [Show full text]
  • Telecharger Cours Turbo Pascal Pdf
    Telecharger cours turbo pascal pdf Continue You can read/download the book by clicking on the link below: a selection of the best tutorials and free courses to learn programming in Pascal. Some courses are for beginners in programming and others for experienced developers. Complete your training or discovery with our corrected series of exercises. Feel free to also refer to Pascal's frequently asked questions, many downloadable source codes and ask your questions on self-help forums. 2 comments Page read once. Number of authors: 18, Number of Elements: 32, Last Updated: February 5, 2020 Best courses to start at Pascal Basics programming Eric Tyrion This comprehensive course gradually presents the basics of programming. The support language is Pascal, and the author's chosen development environment is Lazarus. The first part contains useful concepts to implement before the programming course starts properly. The following parts are devoted to routines, management structures, tables, structured types and files, respectively. 8 Comments Introduction to Pascal's Language by Patrick Trau Introductory textbook on Pascal's language, with corrected exercises, directed by Patrick Trau, professor at Louis Pasteur University in Strasbourg. Although this course was developed a few years ago, it remains very relevant to present the basics of Pascal language. 6 Comments Turbo Pascal Hugo Etievant Full tutorial on Turbo Pascal, with courses and exercises to boot. This is a corrected version of the original Cyberzoide course. 100 questions with multiple answers allow you to test your knowledge. 8 Comments Multimedia Educational Package - 8th edition of Robert Michel di Scala A very comprehensive initiation course in computer science and software development, with accompanying support panels and exercises and evaluation simulators on important chapters in the form of locally executed applications after download.
    [Show full text]
  • Sketchpad for Windows
    AN ABSTRACT OF THE THESIS OF Sudheendra S. Gulur for the degree of Master of Science in Mechanical Engineering presented on October 7, 1994. Title: Sketch Pad for Windows: An Intelligent and Interactive Sketching Software. Redacted for Privacy Abstract approved: David. G. Ullman The sketching software developed in this thesis, is aimed to serve as an intelligent design tool for the conceptual design stage of the mechanical design process. This sketching software, Sketch Pad for Windows, closely mimics the traditional paper-and-pencil sketching environment by allowing the user to sketch freely on the computer screen using a mouse. The recognition algorithm built into the application replaces the sketch stroke with the exact CAD entity. Currently, the recognition of two-dimensional design primitives such as lines, circles and arcs has been addressed. Since manufacturing requires that the design concepts be detailed, sketches need to be refined as detailed drawings. This process of carrying design data from the conceptual design stage into the detail designing stage is achieved with the help of a convertor that converts the sketch data into DesignView (a variational CAD software). Currently, only geometrical information is transferred from the sketching software into DesignView. The transparent graphical user interface built into this sketching system challenges the hierarchial and regimental user interface built into current CAD software. Sketch Pad for Windows An Intelligent and Interactive Sketching Software by Sudheendra S. Gulur A THESIS submitted to Oregon State University in partial fulfillment of the requirements for the degree of Master of Science Completed October 7, 1994 Commencement June, 1995 Master of Science thesis of Sudheendra S.
    [Show full text]
  • Doctorado En Ciencias De La Computación
    UNIVERSIDAD NACIONAL DEL ALTIPLANO ESCUELA DE POSGRADO DOCTORADO EN CIENCIAS DE LA COMPUTACIÓN TESIS ARQUITECTURA PERVASIVA CON TECNOLOGÍAS WebRTC HÍBRIDAS PARA EL DESARROLLO DE UN FRAMEWORK MODELO VISTA CONTROLADOR DE TIEMPO REAL PRESENTADA POR: RAMIRO PEDRO LAURA MURILLO PARA OPTAR EL GRADO ACADÉMICO DE: DOCTOR EN CIENCIAS DE LA COMPUTACIÓN PUNO, PERÚ 2019 DEDICATORIA A mis padres Pedro y Adela, que han dedicado su vida en cuidar de mis hermanas y de mi con sus peculiares ejemplos, cariño y formas no ortodoxas de educación, pero en final efectivas para criar unos hijos de bien y este grado esta dedicados a ellos como un agradecimiento por su sacrificio y enseñanzas. A Julia, mi novia y esposita, y aunque algunas veces mi dolorcito de cabeza yo la quiero mucho, fue con ella con quien hemos comenzado a crear y compartir una vida de pareja unida y perdurable mirando siempre hacia el futuro, ella me ha enseñado que el cariño puede fluir con total compromiso y entrega aunque debemos lidiar siempre con los problemas cotidianos, pero estoy para apoyarla y quererla mucho estoy para quererla mucho y no para tratar de comprenderla, pero en suma y sobretodo me he encontrado enamorado de su forma de quererme y ponerme siempre en primer lugar. A mis “queridas hermanas” Do cio y Mary por su apoyo cuando he estado en problemas, eso tiene un valor incalculable gracias mis niñas, sin el sentido de responsabilidad de Mary unida con el desenfado de Docio no hubiéramos podido apoyarnos y avanzar juntos. A mis amigotes de toda la vida a Romel y Vlady, sin ustedes no estaría concretando esta meta, mis más sinceros agradecimientos pues ustedes en particular nunca siempre me han dado la mano y confiado en mis a veces cabildantes habilidades.
    [Show full text]