C++ David Croft Languages C++ Variables

Syntax Conditionals Arrays

122COM: Introduction to C++

Loops while for Compiling Debugging

David Croft

Recap

Coventry University [email protected]

2017

C++

Overview

David Croft Languages C++ Variables

1

Languages

2

C++ Variables

3

Syntax Conditionals Arrays Loops

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

while for

Compiling Debugging 4

Recap

C++

Expectations

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while

All courses expected to be aware of different languages.

for Compiling

Advantages and disadvantages.

Debugging

Recap

BIT & MC are allowed to do most of 122COM in Python3. Can choose C++11 if they wish.

Everyone else is expected to move to C++11 for the remainder of 122COM.

C++

Expectations

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for

All students are expected to learn some C++. In future weeks will mostly be looking at generic programming concepts. Will be taught in Python and C++.

Compiling Debugging

Recap

BIT & MC students. Python or C++ unless task says otherwise. Will not be tested on C++ code. May be tested on language differences. High/low languages. Compiling. Static/dynamic typing.

Everyone else. C++ unless task says otherwise.

C

C++

Highs and lows

David Croft

I

Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling

Programming languages split into levels.

High level languages i++; ⇓ Assembly

Debugging

addl $1, -4(%rbp)

Recap

Low level languages are machine code, assembly language.

⇓ Machine code

High level languages are Python, C++, Java etc.

10111000000000000000000000000000 00000000010111011100001101110001 00000000000000000000000000000100

Not a binary classification, e.g. C++ is lower level than Python.

⇓ Hardware

C++

Low level

David Croft

I

Languages C++ Variables

Syntax

Machine code 1st generation.

Conditionals Arrays Loops

Really hard to understand.

while for

Really hard to write.

Compiling Debugging

Recap

The actual instructions to the hardware.

11100101110001110100010111111100 00101010000000000000000000000000 10000011010001011111110000000001 10111000000000000000000000000000 00000000010111011100001101110001 00000000000000000000000000000100

C++

Low level

David Croft

I

Languages C++ Variables

Syntax

Machine code 1st generation.

Conditionals Arrays Loops

Really hard to understand.

while for

Really hard to write.

Compiling Debugging

Recap

The actual instructions to the hardware.

11100101110001110100010111111100 00101010000000000000000000000000 10000011010001011111110000000001 10111000000000000000000000000000 00000000010111011100001101110001 00000000000000000000000000000100

Assembly 2nd generation. Hard for humans to understand. Hard for humans to write. 1-to-1 correspondence with what is run.

movl $42, -4(%rbp) addl $1, -4(%rbp)

C++

High level

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Python, C, C++, Java, PHP, Perl etc.

I

C++

High level

David Croft Languages C++ Variables

Syntax

Python, C, C++, Java, PHP, Perl etc.

Conditionals Arrays Loops while for Compiling Debugging

Recap

3rd generation.

I

C++

High level

David Croft Languages C++ Variables

Syntax

Python, C, C++, Java, PHP, Perl etc.

Conditionals Arrays Loops

3rd generation.

while for Compiling Debugging

Recap

Favour programmer, not machine.

I

C++

High level

David Croft Languages C++ Variables

Syntax

Python, C, C++, Java, PHP, Perl etc.

Conditionals Arrays Loops

3rd generation.

while for

Favour programmer, not machine.

Compiling Debugging

Recap

Easy for humans to understand...compared to the alternatives. Easy for humans to write...compared to the alternatives.

I

C++

High level

David Croft Languages C++ Variables

Syntax

Python, C, C++, Java, PHP, Perl etc.

Conditionals Arrays Loops

3rd generation.

while for

Favour programmer, not machine.

Compiling Debugging

Recap

Easy for humans to understand...compared to the alternatives. Easy for humans to write...compared to the alternatives. Portable.

I

C++

High level

David Croft Languages C++ Variables

Syntax

Python, C, C++, Java, PHP, Perl etc.

Conditionals Arrays Loops

3rd generation.

while for

Favour programmer, not machine.

Compiling Debugging

Recap

Easy for humans to understand...compared to the alternatives. Easy for humans to write...compared to the alternatives. Portable. Different machine/processor/OS == different compiler. Same C/Python/C++/Java code.

I

C++

High level

David Croft Languages C++ Variables

Syntax

Python, C, C++, Java, PHP, Perl etc.

Conditionals Arrays Loops

3rd generation.

while for

Favour programmer, not machine.

Compiling Debugging

Recap

Easy for humans to understand...compared to the alternatives. Easy for humans to write...compared to the alternatives. Portable. Different machine/processor/OS == different compiler. Same C/Python/C++/Java code.

int i=42; i++;

I

C++

History of C++

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

So far you have used Python.

I

C++

History of C++

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

So far you have used Python. Now going to learn C++.

I

C++

History of C++

David Croft Languages C++ Variables

Syntax Conditionals

So far you have used Python. Now going to learn C++.

Arrays Loops while for Compiling Debugging

Recap

Created somewhere in 1979-1983.

I

C++

History of C++

David Croft Languages C++ Variables

Syntax Conditionals

So far you have used Python. Now going to learn C++.

Arrays Loops while

Created somewhere in 1979-1983.

for Compiling Debugging

Recap

Based on C (created 1972).

I

C++

History of C++

David Croft Languages C++ Variables

Syntax Conditionals

So far you have used Python. Now going to learn C++.

Arrays Loops while

Created somewhere in 1979-1983.

for Compiling Debugging

Recap

Based on C (created 1972). Going to be learning C++11 (approved 2011).

I

C++

History of C++

David Croft Languages C++ Variables

Syntax Conditionals

So far you have used Python. Now going to learn C++.

Arrays Loops while

Created somewhere in 1979-1983.

for Compiling Debugging

Recap

Based on C (created 1972). Going to be learning C++11 (approved 2011). C++14 has been approved (2014). Limited support yet.

99.9% backwards compatible. All the way to C.

Supports the same paradigms as Python. Objected oriented, functional, declarative etc.

I

C++

About C++

David Croft Languages C++ Variables

Syntax

Most significant difference... C++ is statically typed.

Conditionals Arrays

Python is dynamically typed.

Loops while for Compiling Debugging

Recap

In Python variables keep track of values AND type. var = 42 # type(var) = var = 'foo' # var = 0.123 # In C++ variables have one type forever. Have to specify type when creating.

int var1 = 42; string var2 = "foo"; float var3 = 0.123;

C

C++

Data types

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for

In C++ have to specify a variable’s type.

Compiling Debugging

Recap

So what types are available? Thousands (at least). You can create your own.

Few standard ones. Most basic data types are called primitives.

C

C++

Primitive types

David Croft Languages C++ Variables

Knowing what the different variables are.

Syntax Conditionals Arrays

Knowing all the primitives and the variations.

Loops while

Knowing ranges/sizes.

for Compiling Debugging

Recap

Type bool char int unsigned int float double void

Bytes 1 1 4 4 4 8

Values true/false ’a’, ’Z’, ’6’, ’+’ -2147483647 → 2147483647 0 → 4294967295 1.234, -0.0001 1.23456789, -0.000000001

Sizes are correct for a 32bit machine.

I

C++

Syntax

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Moving from Python to C++. Not as bad/scary as it seems. Same basic structure. Slightly different syntax.

C

C++

Hello World!

David Croft Languages

Basic Python.

C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

print('Hello World!')

C

C++

Hello World!

David Croft Languages

Basic Python.

C++ Variables

Syntax

print('Hello World!')

Conditionals Arrays

More complete Python

Loops while for Compiling

import sys

Debugging

Recap

def main(): print('Hello World!') if __name___ == '__main__': sys.exit(main()) lec_hello.py

C

C++

Hello World!

David Croft Languages

Basic Python.

C++ Variables

Syntax

print('Hello World!')

Conditionals Arrays

More complete Python

Loops while for Compiling

import sys

Debugging

Recap

C

def main(): print('Hello World!') if __name___ == '__main__': sys.exit(main()) lec_hello.py

C++. #include using namespace std; int main() { cout « "Hello World!" « endl; }

return 0;

lec_hello.cpp

C++

Hello World!

David Croft Languages

Basic Python.

C++ Variables

Syntax

print('Hello World!')

Conditionals Arrays

More complete Python

Loops while for Compiling

import sys

Debugging

Recap

C

def main(): print('Hello World!') if __name___ == '__main__': sys.exit(main())

C++. #include using namespace std; int main() { cout « "Hello World!" « endl; }

return 0;

lec_hello.cpp

lec_hello.py

All programs in C++ MUST have exactly one main() function. C++ uses { and } instead of indentation. You should still have indentation in C++ but is aesthetic only.

Semi-colons at the end of lines.

C++

if statements

David Croft Languages C++ Variables

Syntax

Same rules as Python.

Conditionals Arrays

Slightly different syntax.

Loops while for Compiling Debugging

Recap

and is now &&. or is now ||. == is still ==.

C

C++

if statements

David Croft Languages C++ Variables

Syntax

Same rules as Python.

Conditionals Arrays

Slightly different syntax.

Loops while for Compiling Debugging

Recap

and is now &&. or is now ||. == is still ==. a = 1 b = 2 if a == b and b > 0: print('Hello World' )

C

C++

if statements

David Croft

C

Languages C++ Variables

Same rules as Python.

Syntax Conditionals

Slightly different syntax.

Arrays Loops while

and is now &&.

for Compiling

or is now ||.

Debugging

Recap

== is still ==.

a = 1 b = 2 if a == b and b > 0: print('Hello World' )

int a = 1; int b = 2; if( a == b && b > 0 ) { cout « "Hello World!" « endl; }

C++

Arrays

David Croft Languages C++

Similar to Python lists.

Variables

Syntax

Can’t be resized.

Conditionals Arrays Loops while for

sequence = [1, 2, 42, 69, 8] sum = 0

Compiling Debugging

Recap

for i in range(len(sequence)): sum += sequence[i] array sequence = {1, 2, 42, 69, 8}; int sum = 0; for( int i=0; i
C

C++

Vectors

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Problem, C++ arrays have a set size. Saw we had to provide a size when declaring arrays.

I

C++

Vectors

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Problem, C++ arrays have a set size. Saw we had to provide a size when declaring arrays. C++ does have ’arrays’ that can be resized. Called vectors. Use arrays inside.

I

C++

Vectors

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Problem, C++ arrays have a set size. Saw we had to provide a size when declaring arrays. C++ does have ’arrays’ that can be resized.

#include #include #include using namespace std; int main() { array myArray = {1,2,3,4,5}; vector myVector = {1,2,3,4}; myVector.emplace_back(5);

Called vectors. Use arrays inside. }

cout « myArray[0] « endl; cout « myVector[0] « endl;

lec_vector.cpp

I

C++

Vectors II

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for

C++ vectors are the closest thing to Python lists.

Compiling Debugging

If you are moving to C++ from Python easier to use vectors?

Recap

append() → push_back() or emplace_back() pop() → pop_back() slicing → resize()

I

C++

while loops

David Croft

C

Languages C++ Variables

Syntax

Same rules as Python.

Conditionals Arrays Loops while for Compiling Debugging

Recap

Slightly different syntax. Brackets (). Braces {}. Semicolons ;. counter = 0 while counter < 10: print('Hello World!') counter += 1

int counter = 0; while( counter < 10 ) { cout « "Hello World!" « endl; counter += 1; }

C++

for loops

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

C++ has two kinds of for loops. One type similar to Python for loops. Actually a range-based loop. Will be covered later.

One type similar to a while loop.

C

C++

for loops

David Croft

C

Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

The original C++ for loop. for( int counter=0; counter<10; counter+=1 ) { cout « "Hello World!" « endl; }

C++

for loops

David Croft

C

Languages C++

for counter in range(10): print('Hello World!')

Variables

Syntax Conditionals Arrays Loops while for Compiling

The original C++ for loop.

Debugging

Recap

Seems very different to the python loop.

for( int counter=0; counter<10; counter+=1 ) { cout « "Hello World!" « endl; }

C++

for loops

David Croft

C

Languages C++

for counter in range(10): print('Hello World!')

Variables

Syntax Conditionals Arrays Loops while for Compiling

The original C++ for loop.

Debugging

Recap

Seems very different to the python loop. Lots of commonalities.

for counter in range(0,10,1): print('Hello World!') for( int counter=0; counter<10; counter+=1 ) { cout « "Hello World!" « endl; }

C++

for loops

David Croft

C

Languages C++

for counter in range(10): print('Hello World!')

Variables

Syntax Conditionals Arrays Loops while for Compiling

The original C++ for loop.

Debugging

Recap

Seems very different to the python loop. Lots of commonalities. Also to while loops.

for counter in range(0,10,1): print('Hello World!') for( int counter=0; counter<10; counter+=1 ) { cout « "Hello World!" « endl; } int counter = 0; while( counter < 10 ) { cout « "Hello World!" « endl; counter += 1; }

C++

Ranged for loops

David Croft Languages C++

sequence = [1,2,3,4,5] for i in sequence: print( i )

Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

The new C++11 ranged for loop, for iterating over a sequence. Less powerful that the old style. Easier. while > for > ranged for

int main() { array sequence = { 1, 2, 3, 4, 5 }; for( int i : sequence ) { cout « i « endl; } }

return 0;

I

C++

Compiling

David Croft Languages C++ Variables

Syntax

C++ code has to be compiled before it is run.

Conditionals Arrays

So does Python it just happens automatically.

Loops while for Compiling Debugging

Recap

Compiler converts C++ code into machine code. Many IDEs handle compiling for you. Visual Studio, Eclipse etc.

Make you do it yourself in this module so you understand it. Understand what IDE is doing. Understand the configuration options in the IDE. Understand the error messages you get. Once understood then use IDEs.

C

C++ David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Compiling

C++

gcc & g++

David Croft Languages C++ Variables

In Codio we are using the GNU C Compiler (created 1987).

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Available for Linux, Mac and Windows.

C

C++

gcc & g++

David Croft Languages C++ Variables

In Codio we are using the GNU C Compiler (created 1987).

Syntax Conditionals

Available for Linux, Mac and Windows.

Arrays Loops while for Compiling Debugging

Recap

How to compile using g++. Demo Codio g++ –std=c++11 hello.cpp -o hello g++ - the compiler program. –std=c++11 - we want to use the C++11 standard of C++. hello.cpp - the file we want to compile. -o hello - the name of the executable to create.

How to run the program. Demo Codio ./hello ./ - it’s in the same directory we’re in. hello - the name of the executable to run.

C

C++

Debugging

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling

What if your code is wrong?

Debugging

Recap

Same as Python. Syntax errors. Runtime errors. Logic errors.

C

C++

Debugging

David Croft

C

Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling

What if your code is wrong?

Debugging

Recap

int main() { cout « "Hi" « endl;

Same as Python. for( int i=0; i>10; j+=1 ) { cut « "Hello World!" « endl }

Syntax errors. Runtime errors. Logic errors. Spot the errors.

}

return 0;

lec_error.cpp

C++ David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Break

C++

Functions

David Croft

C

Languages C++ Variables

Syntax Conditionals Arrays Loops while for

Have to specify the type for the return value and the parameters. Otherwise the same as Python. void if it doesn’t return anything.

Compiling Debugging

Recap

int sum( int a, int b ) { return a + b; } void nothing_function() { cout « "Return nothing" « endl; } lec_function.cpp

def sum( a, b ): return a + b def nothing_function(): print( "Return nothing" ) lec_function.py

C++

New and improved!

David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

Important announcement - Two types of arrays in C++11. One is carried forward from C. Still seen regularly.

C++03 introduced an alternative. STL arrays.

I

C++

New and improved!

David Croft Languages C++ Variables

Important announcement - Two types of arrays in C++11. One is carried forward from C.

Syntax

Still seen regularly.

Conditionals Arrays

C++03 introduced an alternative.

Loops while

STL arrays.

for Compiling Debugging

Recap

#include #include using namespace std; int main() { int oldArray[5] = {1,2,3,4,5}; array newArray = {1,2,3,4,5}; }

// use me!

cout « oldArray[0] « " " « newArray[0] « endl;

lec_arrays.cpp

I

C++

There’s two of them?

David Croft Languages C++ Variables

Syntax Conditionals

Two types of arrays. Old style arrays are still very common.

Arrays Loops

Legacy code.

while for Compiling

Old tutorials.

Debugging

Recap

Want you to use the new ones.

What was wrong with the old ones? New arrays are safer. Avoid overflows.

Easier to use. Sorting, searching, reversing, iterating etc.

Are backwards compatible with old code.

I

C++

Why do I care?

David Croft Languages C++ Variables

Syntax Conditionals

Everyone C++ is widely used, 4th on IEEE top language list 2016.

Arrays Loops while for

Knowledge of multiple languages can help you in understanding the underlying logic concepts.

Compiling Debugging

Recap

Computing - C++ provides more efficient code than Python. Computer Science - C++ provides direct memory access, allowing greater understanding of computer memory and important abilities such as concurrent programming. Ethical Hackers - C++ provides direct memory access, important in understanding many hacks. Games Tech - C++ is a requirement for many games companies, it is an absolute requirement for your 3rd year modules.

C++

Recap

David Croft Languages C++ Variables

Syntax Conditionals Arrays

C++ is a high level language.

Loops while

Compiled.

for Compiling Debugging

Recap

Statically typed. Arrays cannot be resized. Use new STL arrays.

Vectors can be resized. Investigate C++ classes. Investigate STL Algorithm Library.

C++ David Croft Languages C++ Variables

Syntax Conditionals Arrays Loops while for Compiling Debugging

Recap

The End

122COM: Introduction to C++ - GitHub

All students are expected to learn some C++. .... Going to be learning C++ (approved. ). ..... Computer Science - C++ provides direct memory access, allowing.

355KB Sizes 7 Downloads 367 Views

Recommend Documents

122COM: Databases - GitHub
SQL. SQLite. Code. Dynamic queries. SQL injection. Recap. Further reading. COM: Databases. David Croft. Coventry University [email protected] ..... the M is for MySQL. Ethical Hackers - need to understand SQL injection. ITB - SQL is widely u

122COM: Databases - GitHub
Database (noun) - a collection of information that is organized so that it can easily be ... Theoretically it doesn't matter what underlying database is. MS SQL Server, Oracle, ..... Experience in using rd party libraries/modules in software. Computi

Introduction to Algorithms - GitHub
Each cut is free. The management of Serling ..... scalar multiplications to compute the 100 50 matrix product A2A3, plus another. 10 100 50 D 50,000 scalar ..... Optimal substructure varies across problem domains in two ways: 1. how many ...

Introduction to R - GitHub
Nov 30, 2015 - 6 Next steps ... equals, ==, for equality comparison. .... invoked with some number of positional arguments, which are always given, plus some ...

Introduction To DCA - GitHub
Maximum-Entropy Probability Model. Joint & Conditional Entropy. Joint & Conditional Entropy. • Joint Entropy: H(X,Y ). • Conditional Entropy: H(Y |X). H(X,Y ) ...

() c - GitHub
(SAP Class Room and Online Training Institute). #514,Annapurna Block,. Adithya Enclave,Ameerpet. Ph:8464048960,www.sysarch.in. BW-81-BO I BI-ABAP I 80 ...

Introduction to phylogenetics using - GitHub
Oct 6, 2016 - 2.2 Building trees . ... Limitations: no model comparison (can't test for the 'best' tree, or the 'best' model of evolution); may be .... more efficient data reduction can be achieved using the bit-level coding of polymorphic sites ....

Introduction to Fluid Simulation - GitHub
upon the notes for a Siggraph course on Fluid Simulation[Bridson. 2007]. I also used .... “At each time step all the fluid properties are moved by the flow field u.

Introduction to NumPy arrays - GitHub
www.scipy-lectures.org. Python. Matplotlib. SciKits. Numpy. SciPy. IPython. IP[y]:. Cython. 2015 ..... numbers and determine the fraction of pairs which has ... origin as a function of time. 3. Plot the variance of the trajectories as a function of t

An Introduction to BigQuery - GitHub
The ISB-CGC platform includes an interactive Web App, over a Petabyte of TCGA data in Google Genomics and Cloud Storage, and tutorials and code ...

Introduction to NumPy arrays - GitHub
we want our code to run fast. ▷ we want support for linear algebra ... 7. 8 a[0:5] a[5:8]. ▷ if step=1. ▷ slice contains the elements start to stop-1 .... Indexing and slicing in higher dimensions. 0. 8. 16. 24. 32. 1. 9. 17. 25. 33. 2. 10. 18.

Introduction to Framework One - GitHub
Introduction to Framework One [email protected] ... Event Management, Logging, Caching, . ... Extend framework.cfc in your Application.cfc. 3. Done. (or in the ... All controllers are passed the argument rc containing the request.context, and all v

introduction - GitHub
warehouse to assemble himself. Pain-staking and time-consuming... almost like building your own base container images. This piggy purchased high- quality ...

Introduction - GitHub
software to automate routine labor, understand speech or images, make diagnoses ..... Shaded boxes indicate components that are able to learn from data. 10 ...... is now used by many top technology companies including Google, Microsoft,.

Introduction - GitHub
data. There are many ways to learn functions, but one particularly elegant way is ... data helps to guard against over-fitting. .... Gaussian processes for big data.

Introduction - GitHub
For the case that your PDF viewer does not support this, there is a list of all the descriptions on ...... 10. Other Formats. 10.1. AMS-TEX. AMS-TEX2.0. A macro package provided by the American .... A TeX Live port for Android OS. Based on ...

Introduction to C++
Keywords are the words already used by C++ in its compiler. They are also known ...... ofile.open("tamils",ios::app|ios::nocreate|ios::out); //append at end of file.

Introduction - GitHub
them each year. In an aggregate travel demand model, this would be represented as 100/365.25 = 0.2737851 trucks per day. In the simulation by contrast, this is represented as ... based on the distance traveled (Table 3.3). 2FAF3 Freight Traffic Analy

C++98 features? - GitHub
Software Architect at Intel's Open Source Technology. Center (OTC). • Maintainer of two modules in ... Apple Clang: 4.0. Official: 3.0. 12.0. 2008. C++11 support.

C-SHARP - GitHub
email address, and business phone number would be most appreciated) c) Method used ... best reflects the population under study. For convenience, the mean ...

C++ IS - GitHub
#ifndef __GameOfLife__Grid__. #define __GameOfLife__Grid__. #include "cocos2d.h". #include "Creature.h" class Grid : public cocos2d::Node. { public:.

Course: Introduction to Intelligent Transportation Systems - GitHub
... Introduction to Intelligent Transportation Systems. University of Tartu, Institute of Computer Science. Project: Automatic Plate Number. Recognition (APNR).

Introduction to REST and RestHUB - GitHub
2. RestHUBанаRESTful API for Oracle DB querying. 2.1. Overview. RestHub was designed .... For example we want to create a simple HTML + Javascript page.

A Beginner's Introduction to CoffeeKup - GitHub
the buffer, then calls the title function which adds it s own HTML to the buffer, and ... Now it is starting to look like real HTML you d find on an ugly web page. 2 ...