TAXI DRIVER A film review by Steve Rhodes Copyright 1996 Steve Rhodes
RATING (0 TO ****): ****
One of Martin Scorsese's first and most important pictures was TAXI DRIVER. For its 20th anniversary, there is a new print and a remastered stereo sound track, and the picture has a new theatrical release. Some of the hairdos make look dated, but the message it tells is as powerful and frightening today as it was in 1976. This is a landmark film in the history of the cinema.
Robert De Niro plays 26 year old Vietnam vet Travis Bickle. Travis is a New York City taxi driver who willing works the nightshift in the roughest sections of town. Prostitutes use the back seat of his taxi as a moving bed, and people are stabbed in it. Travis is a psychological misfit, but someone who wants this degradation cleaned up. He, of course, does not realize that he is one of them.  He wants to be that rain.
He falls in love with a beautiful woman in the window of a Senator Charles Palantine (Leonard Harris) for President campaign headquarters. He finds her name is Betsy (Cybill Shepherd), and he even gets her to go on a date with him. They both have an outward innocence that make them appear well matched in some strange sense. When Betsy realizes that his idea of a date is a porn movie in the sleaziest area of town, she walks out and refuses to ever speak to him again.
Some of the movie has the taxi drivers at a coffee shop, a la DINER, discussing life. After Betsy ditches him, Travis tries to understand it all so he turns to the oldest and hence wisest taxi driver, who goes by the nickname of Wizard (Peter Boyle). Wizard sees his job as the shaper of his destiny and tells Travis, "You get a job. You become the job."
The show is full of great visuals.  In another he glares at American Bandstand while holding a gun with a foot long barrel resting on his temple.
There are many great minor characters. One of my favorites has Martin Scorsese as a husband sitting in Travis's taxi watching his philandering wife's silhouette in the window of an apartment. He turns out to be as evil as Travis. Eventually Travis buys himself a small arsenal of weapons. He practices the classic cinematic line, "You talkin' to me," in the mirror while practicing drawing his guns quasi-cowboy style. He tells himself, "Listen world. Here is a man who stood up against the scum."
Travis meets a 12 1/2 year old prostitute named Iris who calls herself Easy (Jodie Foster). He decides he wants to save her in particular and mankind in general, but the problem is that she does not want to be saved since she is used to staying with her pimp Matthew, whom she calls Sport (Harvey Keitel). To Travis this is all a mission as if from God, although he claims no divine inspiration. Travis says, "Now I see this clearly. My whole life is pointed in one direction. There never has been a choice for me."
In a scene reminiscent of John Hinkley, Travis goes fully armed to a Palantine rally.  The senator proclaims, "We meet at a crossroads in history. No longer will the wrong roads be taken." In a movie full of make up and hair styles that make a statement, Travis shows up at the rally with a Mohawk. The ending is suspenseful, extremely gory, and somewhat surprising. The epilogue after that is really surprising.
So much of this study of evil is brilliant. Certainly at the top of the list is the acting by De Niro, but close behind would be the directing and the writing (Paul Schrader). Everyone knows what an excellent job Jodie Foster did, but I was impressed at how Cybill Shepherd took the almost coquettish but naive minor part and made it interesting. Harvey Keitel had a tiny part, but managed to put a lot into it.
The cinematography (Michael Chapman) throughout the picture is quite effective showing the grit and the garish lights of the city, but the slow motion sequences at the end are the best. The sets (Charles Rosen) of New York City are suitably ugly, thus creating just the right images. The costume design (Ruth Morley) ranged from a lovely set of sweet dress complete with beautiful neck bands for Betsy to sinister outfits for Travis. An impressive range.
I certainly was pleased with the remastered sound since the show had great movie music (Bernard Herrmann). It started off with sad and melancholic tunes and then switched to ominous ones created with a muted trumpet. Rarely these days do films dare to have any music to speak of, and if they do, it is frequently nothing more that loud and overpowering rock music that turns the show into a long rock video more suitable for MTV.
TAXI DRIVER runs a well edited, thanks to Marcia Lucas, Tom Rolf, and Melvin Shapiro, and fast 1:53. It is rated R, but borders on NC-17. There is no sex or nudity. The language is frequently obscene, and there are some racial epithets. The reason I say it is almost NC-17 is solely for the gory ending. I do not think the violence is gratuitous, and I am glad the studio did not demand a more saleable version without the scenes. I think the picture as delivered is brilliant. I would let teenagers see it if they are mature. I recommend the film highly, and give it my top rating of ****.
REVIEW WRITTEN ON: March 5, 1996
Opinions expressed are mine and not meant to reflect my employer's.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


MSC poaches Maersk’s former head of operations as its new CEO
Copenaghen - MSC has poached rival A.P. Moller-Mærsk’s former head of operations Soren Toft to become its new chief executive officer, Danish media ShippingWatch reported on Friday, citing unidentified sources
Copenaghen - MSC has poached rival A.P. Moller-Mærsk’s former head of operations Soren Toft to become its new chief executive officer, Danish media ShippingWatch reported on Friday, citing unidentified sources.
Maersk said earlier this week Toft had decided to leave the company to pursue outside opportunities. He later told Danish media he had accepted a CEO role at an unidentified company. The change of job will be officially announced next week, according to ShippingWatch. MSC declined to comment on the report


Manipulated an image that I took using only Processing.js.
Bad Cereal
The purpose of this assignment was to create a terrible idea for a new cereal but make the box look commercial quality. All of the design and image manipulation was done with Adobe Photoshop.
Cloud Graphic
The purpose of this assignment was to choose and adjective and make it look like what it describes using Adobe Photoshop.
Multiplicity
Image manipulation using Adobe Photoshop.
3D Modeling
Created a 3D model of a guitar and other household objects with Autodesk Maya. Tasks included modeling, UV mapping, texturing, lighting, and rendering.
User Interface Prototype
Conceptualized an educational aid application and created a user interface prototype with Adobe Photoshop.
Face Swap
Superimposed my face onto an a character from a movie using Adobe Photoshop.
Comic Book
Led a team in the creation of a full color comic book using Adobe Photoshop and Illustrator. Responsibilities included concept art, coloring, and layout design.
Survey
Created a short website questionnaire using core JavaScript, HTML, and CSS.
Music Compositions
Using mainly Image-Line FL Studio, I compose music of various genres and share them on SoundCloud and other music sharing platforms.
Music Covers
I like to do arrangements of some my favorite video game music on my YouTube Channel. Video game series I have done covers from include Mario, Zelda, Animal Crossing, and more.
Visual Resume
Designed a visual resume using D3.js for the the data visualizations.


Photography is one of my strongest skills. I am very passionate about all the work I do in photography! I am a landscape and travel enthusiast! I have experience with lightroom and photoshop.


{%- if page.key and site.comments.gitalk.clientID and site.comments.gitalk.clientSecret and site.comments.gitalk.repository and site.comments.gitalk.owner and site.comments.gitalk.admin -%} {%- include snippets/get-sources.html -%} {%- assign _sources = __return -%}
{%- assign _admin = '' -%} {%- for _admin_id in site.comments.gitalk.admin -%} {%- assign _admin = _admin | append: ", '" | append: _admin_id | append: "'" -%} {%- endfor -%} {%- assign _last = _admin | size | minus: 1 -%} {%- assign _admin = _admin | slice: 2, _last -%} {%- endif -%}


Mushika:
Thank you for saying that. Asamah and I suspect that my illness is somehow connected to our ancient home, the Lost Nest.
Nor do we think that our troubles have ended simply because I have been restored to health.
But in you, I see the fated link that will reconnect my people with our past and our future.
"I don't understand. What are you talking about?"
"How I can help?"


Customer Orders
Order details
Accept order
Decline order
Order completed
Total Amount: N 3,000,000.00
sn
Customer Name
Item description
Time
Qty
Amount
Actions
complete
| sn | Customer Name | Item description | Time | Qty | Amount | Action | Complete | ||
|---|---|---|---|---|---|---|---|---|---|
| 1 | Alex colman | Fried with chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |
|
| 2 | Philip newman | Fried with chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |
|
| 3 | Philip newman | Fried rice with 1 chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |
|
| 4 | Philip newman | Fried rice with 1 chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |
|
| 5 | Thomas King | Fried rice with 2 chicken | 5:00 | 6:00 | 6500 | order details |
Accept |
Decline |
|
| 6 | Tom inglis | Fried rice with 1 chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |
|
| 7 | Doorman stephen | Fried rice with chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |
|
| 9 | Thomas King | Fried rice with 2 chicken | 5:00 | 6:00 | 6500 | order details |
Accept |
Decline |
|
| 10 | Tom inglis | Fried rice with 1 chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |
|
| 11 | Doorman stephen | Fried rice with chicken | 5:00 | 6:00 | 4500 | order details |
Accept |
Decline |


Your response has been sent
You will be redirected to our website in
3
seconds.
Click Here
to view our website.


Wildlifeegy
PROFILE
LOGOUT
Please Donate
Support us by donating a small amount
Please fill out the below form to make your contribution
Send Love


Yahoo
Authored By: Denis Smirnov
Yahoo, a very popular internet browser in the early internet days, starts it’s run in second place with 36 million page views. Yahoo overtakes Aol and becomes the most visited site in april of 2001. Yahoo was overtaken by Google in June of 2006 putting Yahoo back in second place. Yahoo reclaims its first place spot shortly and proceeds to fall down to seventh place where it ends its run with almost 3.5 billion page views.
Website Logo


Christopher Nolan’s "Interstellar," about astronauts traveling to the other end of the galaxy to find a new home to replace humanity’s despoiled home-world, is frantically busy and earsplittingly loud.
Taking place in a dystopian Australia in the near future, Mad Max tells the story of a highway patrolman cruising the squalid back roads that have become the breeding ground of criminals foraging for gasoline and scraps.
Neo (Keanu Reeves) believes that Morpheus (Laurence Fishburne), an elusive figure considered to be the most dangerous man alive, can answer his question -- What is the Matrix? Neo is contacted by Trinity (Carrie-Anne Moss), a beautiful stranger who leads him into an underworld where he meets Morpheus. They fight a brutal battle for their lives against a cadre of viciously intelligent secret agents. It is a truth that could cost Neo something more precious than his life.
The central theme holding the film together is Freedom. Each of the stories in their own way work towards the idea of liberation. This may be freedom from person demons or freedom from the social structure. Its fascinating to note that the birth mark connecting the characters resembles a KEY.


The Unified Extensible Firmware Interface is a replacement to the ancient concept of a BIOS or CMOS on a PC Motherboard. UEFI only works with 64-Bit Windows, and can not read the UDF File System or files larger than 4095 MB during setup. Windows 7 also does not have the drivers to support a video card under UEFI, so a Legacy Graphics or Compatibility Module option is still required. Simply enable the required feature and boot to the installation media through UEFI specifically.
Slips7ream can enable UEFI support in an ISO by copying some EFI-support files to the right folders and ensuring the File System can be read by the UEFI. If you can find and integrate the right drivers, installation may be successful, but Safe Mode and other things that rely on vga.sys will fail.


Contact me
phone number:9595949752
<EMAIL_ADDRESS>to contact him please submit the form below
name
Phone number
enter your email address
date of birth
select your language you have command in
c language
java language
python language
occupation
studying
job
retired
time pass
Describe your-self
Why you wanna contact me?


softlang.net
softlang.net，focus in IT technology & service.
Customed software
Give the particular software what do you wanted，We good at：Go, Java, C#(.net core & asp.net), Python, node, Vue/React, iOS&Android.
BI & Big Data
Deploy the Greenplum data bank，extract valueable data by Python / Node. To show you by the web page.
Devops
Docker-swarm + Nginx to make the applicaitons platform. Jenkins + Git + Registry to Compiler & Build & Deploy service on docker swarm.


| Aware | Join | Use & Develop | Leave/Repeat | ||||
|---|---|---|---|---|---|---|---|
Pre-Step |
"I just got a job or at least I am thinking about getting one." | "I got all the information I needed about how to join SKAT." | "I got my tax card made and my preliminary assessment." | "I have full control and understanding over my tax process." | |||
Step |
"I am getting all the information I need through the relevant channels for me about how to join SKAT." | "I am getting my tax card as well as my preliminary assessment done. I am confident that the relevant information will be registered after finishing the process." |
"I am now able to make full use of the SKAT services. Usage doesn't require much or any input from the customer. The information is the same across all channels." "This helps me understand my personal tax situation." |
"I have the ability to go further in my use of SKAT. Developing sufficient understanding of the tax system and finds ways how to benefit from it. I fully understands the Danish tax system with all the forms." | "I get my yearly statement.  | ||
Channels |
Combination of one or more of the 6 options:
|
Calling:
|
Website:
|
International house (optional appointment):
|
Optional continued use:
Announcements:
|
New abilities:
Feedback:
|
Announcements:
Taxes adjusted:
Feedback:
|
|
Confirmation:
|
Taxes paid:
|
||||||
|
Always available:
|
|||||||
|
Backstage
|
Letter sent after registering for CPR | SKAT Calculator | |||||
| Advisors being trained | Appointment system | NemKonto link | |||||
| Project management team working with school administration | International House organization | Advisors being trained | |||||
| Project management team working with school administration | |||||||
|
Activities that run across all stages:
|


Aspendell
A mountain community near Bishop, California
Website of the Aspendell Property Owners Association (APOA)


Minsk isn't the most advanced, wealthy or famous city but it's safer than Warsaw, cheaper than Kiev, less crowded than Moscow and cleaner than most European capitals. Moreover it has its own spirit and interesting history.
Belarus is called as a "lungs" of Europe
Belarus is a land of vast plains and picturesque hills, thick forests and green meadows, deep blue lakes and flowing rivers. Forests cover 2/5 of Belarus, they are scattered all over the country.
There are a lot of rivers and lakes in our country. The Dnieper, Pripyat, Beresins, Sozh, Zapadnaya Dvina, Neman are the biggest rivers with more then 500 kilometers in length. The largest lake in Belarus is Lake Naroch which stretches 13 kilometers from West to East. It is a very popular recreation area in our country. Belarus has a moderately continental climate due to the influence of the Atlantic Ocean with a warm winter and warm summer.
Numerous museums, castles and historic towns, preserving the spirit of the country's rich historical heritage, are situated round the capital, adorned by lush flora.
Not only it is the vicinity of the legendary Belovezhskaya Pushcha, but also a historic site of many cultures, inhabiting Belarus throughout its history.
The host of an international music open-air festival Slavianski Bazaar (Slavic Bazaar), showcasing the colorful traditions of Belarus and its neighbors.
A place where modern city borders numerous archaeological sites embraced by relic forests.
Beautiful landscape spiced up by medieval castles and monasteries, and the biggest zoo in Belarus for the joy of youngest travellers.
Postmodern eclectic architecture bearing the signs of glorious soviet monumentalism mixed with advanced districts zested by the hints of avant-garde.
We bet you've never been here before!
Find your inner harmony!
Dare yourself to explore the Puscha!
Endemic fauna untouched by human intervention!


MALLRATS A film review by Christopher Null Copyright 1995 Christopher Null
Well, the long-awaited MALLRATS is here at last, and sadly, the perfect twentysomething romantic comedy has still yet to be made. Writer/director Kevin Smith follows up his hilarious first film, CLERKS, with this, the second in his so-called New Jersey Trilogy. It's second not only in sequence, but a distant also-ran in quality, too.
MALLRATS tells the story of two mostly-losers, T.S. (Jeremy London) and Brodie (Jason Lee), who manage to lose and regain their respective girlfriends, Brandi (Claire Forlani) and Rene (Shannen Doherty), in one long day at the mall. Along the way, the pair has a series of big adventures with cops and security guards, a game show organized by Brandi's dad (Michael Rooker), comic book creator Stan Lee, and the returning characters of Jay (Jason Mewes) and Silent Bob (Smith himself). Where all this was supposed to go, I'm not too sure. But I *think* it was supposed to be about relationships, and I think it was supposed to be funny.
For the most part, it's not. Surprisingly, it's Jason Lee (who moves into his first acting role from a career as a professional *skateboarder*) who has all the good lines, and those are few and far between. Gone is Smith's witty and smartly lascivious dialogue from CLERKS. Instead, the MALLRATS script often sounds more like mindless smut with only a few bright moments of real farcical entertainment.
MALLRATS probably wouldn't be so painful if I didn't know what Smith was capable of doing (and with a lot less funding, to boot). This film comes off as little more than random bits of plot and failed attempts at humor: Doherty parading about in her first appearance outside the 90210 ZIP code, Smith's strange homage to Stan Lee, Silent Bob's magic coat, slapstick, sex jokes, and a completely inexplicable orangutan.
I don't know what Smith was thinking when this project came together, but let's just hope this is just the proverbial Sophomore slump. Kev, I know you can do better than this.
RATING: **1/2
\-------------------------------\ |* Unquestionably awful | |** Sub-par on many levels | |*** Average, hits and misses | |**** Good, memorable film | |***** Perfection | \-------------------------------\
-Christopher Null /<EMAIL_ADDRESS>-Movie Emporium (archives) / http://www.notes.tpoint.net/emporium/ -Contributing Editor, FEEDBACK / http://www.eden.com/~feedback -E-mail requests to join the movie review mailing list
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


There are several cases when an exception might be thrown because of invalid input data or some user-related error. For these cases, we define a custom Exception class. When thrown, it will be reported differently than the other "unexpected" exceptions caught in the main program. We try to give as much information as possible about the error, so that user knows how to fix the problem.
namespace LiterateCS.Theme
{
using System;
using System.Text;
public class LiterateException : Exception
{
The errors always refer to some file we are processing, so we can define it as a mandatory field of the exception.
public readonly string FileName;
The other fields that we require are the actual error message, the link to the documentation that helps the user to understand what the application expects, and the inner exception which can be null. Inner exception explains the actual problem; the outer exception gives the context what the application was doing when it encountered the error.
public LiterateException (string message, string file, string helpLink,
Exception innerException) : base (message, innerException)
{
FileName = file;
HelpLink = helpLink;
}
public LiterateException (string message, string file, string helpLink)
: this (message, file, helpLink, null) { }
We format the fields of the exception to a readable layout by overriding the ToString method.
public override string ToString ()
{
var res = new StringBuilder ();
res.AppendFormat ("Error occurred while accessing file: {0}\n\n",
FileName);
res.AppendLine ("Description:");
res.AppendLine ("------------");
res.AppendLine (Message);
if (InnerException != null)
{
res.AppendLine ();
res.AppendLine ("Detailed Description:");
res.AppendLine ("---------------------");
res.AppendLine (InnerException.Message);
}
res.AppendLine ();
res.AppendFormat ("For more information see: {0}", HelpLink);
return res.ToString ();
}
}
}


URL Shortener
No Advertisement! No Price! No User Tracking! No Time Limit!
[!]Just Make The Link Shorter[!]
Owner
:
SaeedEY.com
If You like to Support me , You can Contact me
Here
or Pay Anonymously by scan
This QrCode Image
;
Thanks for Using our URL Shortener Tool, Here is Your Short Link:
Your Shorten Link:
Your Manage Link:
createToken($short_link);?>
Count Total Click:
createToken($short_link);?>?json
Delete Short Link:
createToken($short_link);?>?delete
Pro Mode
*/?>


Recent Posts
Welcome to my blog page.
I will be updating this page as I learn through.
Will be putting on links of my projects that I am working on.
Each project will be included with skills that I went through for guidance.
Also, this blog is work on progress.


I'm Saiful Molla. Welcome to my site.
I started coding when I was 17 years old. Now I'm a full stack web developer and database master.
I've mastered many programming language like Javascript. & many more backend frameworks like nodeJS, Php, MongoDB and database like SQL.
If you have any qurries or want to get a website like this or any kind of website than you can contact me.
MESSAGE ME


Video: Mega Man is officially coming to Dragalia Lost
by albaThe development team behind Dragalia Lost has released the below intro video for Mega Man, who appears in the Mega Man: Chaos Protocol event scheduled to start on November 28. Mega Man is an adventurer you can add to your team during this event. If you participate in it and meet certain conditions, you’ll be able to recruit him in the mobile game. To learn more about this special collaboration, click here.


Health Wallet is dedicated to joining together people that need help with people that can help. This is an opportunity for people that may be living in fear or shame to reach out anonymously and get the help they need and deserve. All of our HealthCare Providers are certified professionals volunteering their time to help. If you want some advice or just someone to talk to who might understand what you are going through, sign up as a peer and you can talk to someone who is seeking the same. It is okay to want help. We are here to help you find someone you can trust that can provide you with the guidance you need and deserve. The HealthCare Providers here are dedicated to supporting you and help you to achieve your goals. The service that this website provides is completely anonymous and absolutely free. We wish you all the best as you start this incredible journey.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32
33 34 35
36 import xdc.runtime.ITimestampClient;
37 import xdc.runtime.IHeap;
38 import xdc.runtime.Types;
39 import xdc.runtime.Log;
40 import xdc.runtime.ILogger;
41 import xdc.runtime.Error;
42 import xdc.runtime.Diags;
43 import xdc.rov.ViewInfo;
44
45 /*!
46 * ======== LoggerSM ========
47 * Logger implementation that stores Log records into shared memory
48 *
49 * This logger implementation stores xdc.runtime.Log records into shared memory.
50 * This logger is intended to be used for SoC system (e.g. EVMTI816X),
51 * where Linux is running on the host core (e.g. CortexA8) and
52 * SYS/BIOS is running on the targets (e.g. M3 and DSP).
53 *
54 * This logger is used on the targets. The host is then responsible
55 * for reading the shared memory and processing the records. UIA
56 * ships the ti/uia/linux/LoggerSM module that can be used to
57 * process the records. UIA also ships a cmdline app,
58 * ti/uia/examples/evmti816x/loggerSMDump.out, that show
59 * how to use the linux/LoggerSM module.
60 *
61 * @a(Cache management)
62 *
63 * The location of the shared memory that is used by LoggerSM must be
64 * specified by the application. This shared memory must be in a
65 * non-cacheable region. The '{@link #bufSection}' configuration
66 * parameter can be used to help place the Logger's buffer.
67 * Refer to the device specific LoggerSM
68 * examples (e.g. ti/uia/examples/evmti816x/readme.txt) to see how this
69 * was accomplished.
70 *
71 * @a(Partitions)
72 *
73 * The application gets to specify the size of the shared region. This
74 * size is divided between each of the targets. For example, on the evmti816x,
75 * if the '{@link #sharedMemorySize}' was 0x3000, each target,
76 * dsp, videoM3 and vpssM3, would get 0x1000 amount of shared memory for
77 * log records. Each target region is called a partition. Since LoggerSM is a
78 * generic logger that can be used on multiple devices, the number of
79 * partitions (e.g. number of targets using the shared memory) is specified
80 * wtih the '{@link #numPartitions}' configuration option. Each target needs
81 * a unique '{@link #partitionId}' also. For example, on evmti816x examples,
82 * the dsp is assigned 0, videoM3 is assigned 1 and vpssM3 is assigned 2. This
83 * corresponds with the IPC Multicore Ids for simplicity sake. Note: the
84 * partition id can be set during target startup also via the
85 * '{@link #setPartitionId}' API.
86 *
87 * LoggerSM supports multiple instances, but all instances are writing to
88 * the same shared memory (in a thread safe manner). This was done to
89 * simplify the design. Because of this, application really should only
90 * create one LoggerSM instance.
91 *
92 * @a(decode and overwrite)
93 * The LoggerSM module has two key configuration options: '{@link #decode}'
94 * and '{@link #overwrite}'
95 *
96 * The '{@link #decode}' configuration determines whether the target will
97 * decode the Log record during the Log call. If '{@link #decode}' is true,
98 * the Log record is converted to an ASCII string and then written into the
99 * shared memory. This approach is expensive from a performance standpoint.
100 * Its value is that it is easy to manage and view on the host
101 * (e.g. ti/uia/examples/evmti816x/loggerSMDump.out prints the ASCII strings
102 * to the console on the CortexA8).
103 *
104 * If '{@link #decode}' is false, the Log records are not decoded. Instead
105 * they are stored in the shared memory as binary data. This allows the
106 * Log calls to be much faster. The burden for decoding is on the readers side.
107 * For example, ti/uia/examples/evmti816x/loggerSMDump.out dumps the encoded
108 * records into a binary file that can be post-processed in
109 * CCS' System Analyzer.
110 *
111 * The '{@link #overwrite}' configuration determines whether the target
112 * will overwrite old records
113 * when the shared memory is full. The default setting is false, so when the
114 * logger is full, new records are dropped. This mode allows the reader
115 * (e.g. ti/uia/examples/evmti816x/loggerSMDump.out) to read the records
116 * while the target is running.
117 *
118 * When '{@link #overwrite}', old records are overwritten when the logger is
119 * full. However, the reader should only run when the targets are halted (or
120 * crashed).
121 *
122 * @a(caveats)
123 * @p(blist)
124 * -Currently LoggerSM assumes the endianness and word size of the host
125 * and targets are the same.
126 * -{@link ti.uia.sysbios.LoggingSetup} and {@link ti.uia.runtime.LogSync}
127 * cannot be used with LoggerSM.
128 * @p
129 */
130 @ModuleStartup
131 @Template("./LoggerSM.xdt")
132 module LoggerSM inherits xdc.runtime.IFilterLogger
133 {
134 /*!
135 * @_nodoc
136 * ======== ModuleView ========
137 */
138 metaonly struct ModuleView {
139 Bool isTimestampEnabled;
140 Bool decode;
141 Bool overwrite;
142 }
143
144 /*!
145 * @_nodoc
146 * ======== InstanceView ========
147 */
148 metaonly struct InstanceView {
149 String label;
150 }
151
152 /*!
153 * @_nodoc
154 * ======== rovViewInfo ========
155 */
156 @Facet
157 metaonly config ViewInfo.Instance rovViewInfo =
158 ViewInfo.create({
159 viewMap: [
160 ['Module',
161 {
162 type: ViewInfo.MODULE,
163 viewInitFxn: 'viewInitModule',
164 structName: 'ModuleView'
165 }
166 ],
167 ['Instances',
168 {
169 type: ViewInfo.INSTANCE,
170 viewInitFxn: 'viewInitInstances',
171 structName: 'InstanceView'
172 }
173 ],
174 ]
175 });
176
177 /*! Error raised if get or setFilterLevel receive a bad level value */
178 config Error.Id E_badLevel =
179 {msg: "E_badLevel: Bad filter level value: %d"};
180
181 /*!
182 * ======== isTimestampEnabled ========
183 * Enable or disable logging the 64b local CPU timestamp
184 * at the start of each event
185 */
186 config Bool isTimestampEnabled = true;
187
188 /*!
189 * ======== decode ========
190 * Flag to determine whether to decode the events in shared memory
191 *
192 * If true, all the events will be decoded into ASCII strings
193 * when it is written into shared memory. If false, binary
194 * data is written instead.
195 */
196 config Bool decode = true;
197
198 /*!
199 * ======== overwrite ========
200 * Flag to determine whether to overwrite records when full
201 *
202 * If true and when the buffer is full, the logger will overwrite
203 * the oldest record. Reading the records can only occur when the
204 * targets have been halted.
205 *
206 * If false and when the buffer is full, the logger will discard
207 * the new record.
208 */
209 config Bool overwrite = false;
210
211 /*!
212 * ======== level1Mask ========
213 * Mask of diags categories whose initial filtering level is Diags.LEVEL1
214 *
215 * See '{@link #level4Mask}' for details.
216 */
217 config Diags.Mask level1Mask = 0;
218
219 /*!
220 * ======== level2Mask ========
221 * Mask of diags categories whose initial filtering level is Diags.LEVEL2
222 *
223 * See '{@link #level4Mask}' for details.
224 */
225 config Diags.Mask level2Mask = 0;
226
227 /*!
228 * ======== level3Mask ========
229 * Mask of diags categories whose initial filtering level is Diags.LEVEL3
230 *
231 * See '{@link #level4Mask}' for details.
232 */
233 config Diags.Mask level3Mask = 0;
234
235 /*!
236 * ======== level4Mask ========
237 * Mask of diags categories whose initial filtering level is Diags.LEVEL4
238 *
239 * If 'filterByLevel' is true, then all LoggerBuf instances will filter
240 * incoming events based on their event level.
241 *
242 * The LoggerSM module allows for specifying a different filter level for
243 * every Diags bit. These filtering levels are module wide; LoggerBuf does
244 * not support specifying the levels on a per-instance basis.
245 *
246 * The setFilterLevel API can be used to change the filtering levels at
247 * runtime.
248 *
249 * The default filtering levels are assigned using the 'level1Mask' -
250 * 'level4Mask' config parameters. These are used to specify, for each of
251 * the four event levels, the set of bits which should filter at that
252 * level by default.
253 *
254 * The default filtering configuration sets the filter level to
255 * Diags.LEVEL4 for all logging-related diags bits so that all events are
256 * logged by default.
257 */
258 config Diags.Mask level4Mask = Diags.ALL_LOGGING;
259
260 /*!
261 * ======== partitionId ========
262 * Unique id for each core using the shared memory
263 */
264 metaonly config Int partitionId = 0;
265
266 /*!
267 * ======== numPartitions ========
268 * Number of partitions sharing the shared memory
269 */
270 config Int numPartitions = 3;
271
272 /*!
273 * ======== sharedMemorySize ========
274 * Total size of shared memory in MAU that will be divided by the number
275 * of partitions
276 */
277 config SizeT sharedMemorySize = 0x20000;
278
279 /*!
280 * ======== userTimestamp ========
281 * Use the user configured Timestamp_get64() instead of TCSL/TCSH.
282 *
283 * For C6x devices, LoggerSM defaults to using the built-in hardware
284 * counter, TCSL/TCSH for timestamping. This improves the performance
285 * of Log statements. However, in some cases, the user may want to
286 * provide their own timestamp provider to LoggerSM, instead of using
287 * TCSL/TCSH.
288 * If userTimestamp is set to true, Timestamp_get64() will be used
289 * instead of reading TCSL/TCSH. For non-C6x devices, changing
290 * this configuration parameter has no effect.
291 */
292 metaonly config Bool userTimestamp = false;
293
294 /*!
295 * ======== bufSection ========
296 * Section name for the buffer in shared memory
297 */
298 metaonly config String bufSection = null;
299
300 /*!
301 * ======== setPartitionId ========
302 * Change the partitionId at runtime.
303 *
304 * Must be called early before module startup occurs.
305 * Generally the best place to do this is via the
306 * xdc.runtime.Startup.firstFxns array. If using the {@link #setSharedMemory}
307 * API, make sure that LoggerSM_setPartitionId() is called before
308 * {@link #setSharedMemory}, if changing the partition Id.
309 */
310 Void setPartitionId(Int partitionId);
311
312 /*!
313 * ======== MetaData ========
314 * This data is added to the RTA MetaData file.
315 */
316 @XmlDtd metaonly struct MetaData {
317 Int instanceId;
318 Int priority;
319 }
320
321 /*!
322 * ======== setSharedMemory ========
323 * Specify the shared memory to be used by LoggerSM
324 *
325 * This runtime API can be called once to initialize the shared memory
326 * that all LoggerSM instances use. This API can only be called
327 * if '{@link #sharedMemorySize}' is set to zero. If
328 * '{@link #sharedMemorySize}' is non-zero, the shared memory is
329 * statically defined and initialized instead. Since the memory
330 * is already defined, this API cannot change it.
331 * Also, the {@link #partitionId} must not be changed after calling
332 * this API.
333 *
334 * The Linux host utility that reads the buffer requires it to be
335 * aligned on a page boundary. So make sure that the buffer passed
336 * to setSharedMemory() is page-aligned (e.g. on a 4096 byte boundary).
337 *
338 * @param(sharedMemory) Base address of the shared memory to be used
339 * by LoggerSM.
340 * @param(sharedMemorySize) Size of the shared memory.
341 *
342 * @a(returns)
343 * This function returns TRUE if successful. It returns FALSE if not.
344 * The reasons for failure are either '{@link #sharedMemorySize}' is
345 * non-zero or the API has been called multiple times.
346 */
347 @DirectCall
348 Bool setSharedMemory(Ptr sharedMemory, Bits32 sharedMemorySize);
349
350 instance:
351 /*!
352 * ======== create ========
353 * Create a `LoggerSM` logger
354 *
355 * @see LoggerSM#Params
356 */
357 @DirectCall
358 create();
359
360 /*!
361 * ======== enable ========
362 * Enable a log
363 *
364 * @a(returns)
365 * The function returns the state of the log (`TRUE` if enabled,
366 * `FALSE` if disabled) before the call. That allow clients to restore
367 * the previous state.
368 */
369 @DirectCall
370 override Bool enable();
371
372 /*!
373 * ======== disable ========
374 * Disable a log
375 *
376 * Events written to a disabled log are silently discarded.
377 *
378 * @a(returns)
379 * The function returns the state of the log (`TRUE` if enabled,
380 * `FALSE` if disabled) before the call. That allow clients to restore
381 * the previous state.
382 */
383 @DirectCall
384 override Bool disable();
385
386 /*!
387 * ======== write0 ========
388 * Process a log event with 0 arguments and the calling address.
389 *
390 * Same as `write4` except with 0 arguments rather than 4.
391 * @see #write4()
392 */
393 @DirectCall
394 override Void write0(Log.Event evt, Types.ModuleId mid);
395
396 /*!
397 * ======== write1 ========
398 * Process a log event with 1 arguments and the calling address.
399 *
400 * Same as `write4` except with 1 arguments rather than 4.
401 * @see #write4()
402 */
403 @DirectCall
404 override Void write1(Log.Event evt, Types.ModuleId mid, IArg a1);
405
406 /*!
407 * ======== write2 ========
408 * Process a log event with 2 arguments and the calling address.
409 *
410 * Same as `write4` except with 2 arguments rather than 4.
411 *
412 * @see #write4()
413 */
414 @DirectCall
415 override Void write2(Log.Event evt, Types.ModuleId mid, IArg a1, IArg a2);
416
417 /*!
418 * ======== write4 ========
419 * Process a log event with 4 arguments and the calling address.
420 *
421 * @see ILogger#write4()
422 */
423 @DirectCall
424 override Void write4(Log.Event evt, Types.ModuleId mid, IArg a1, IArg a2,
425 IArg a3, IArg a4);
426
427 /*!
428 * ======== write8 ========
429 * Process a log event with 8 arguments and the calling address.
430 *
431 * Same as `write4` except with 8 arguments rather than 4.
432 *
433 * @see #write4()
434 */
435 @DirectCall
436 override Void write8(Log.Event evt, Types.ModuleId mid, IArg a1, IArg a2,
437 IArg a3, IArg a4, IArg a5, IArg a6, IArg a7, IArg a8);
438
439 /*!
440 * ======== setFilterLevel ========
441 * Sets the level of detail that instances will log.
442 *
443 * Events with the specified level or higher will be logged, events
444 * below the specified level will be dropped.
445 *
446 * Events are filtered first by diags category, then by level. If an
447 * event's diags category is disabled in the module's diags mask, then it
448 * will be filtered out regardless of level. The event will not even be
449 * passed to the logger.
450 *
451 * This API allows for setting the filtering level for more than one
452 * diags category at a time. The mask parameter can be a single category
453 * or multiple categories combined, and the level will be set for all of
454 * those categories.
455 *
456 * @param(mask) The diags categories to set the level for
457 * @param(filterLevel) The new filtering level for the specified
458 * categories
459 */
460 @DirectCall
461 override Void setFilterLevel(Diags.Mask mask, Diags.EventLevel filterLevel);
462
463 /*!
464 * ======== getFilterLevel ========
465 * Returns the mask of diags categories currently set to the specified
466 * level.
467 *
468 * See '{@link #setFilterLevel}' for an explanation of level filtering.
469 */
470 @DirectCall
471 override Diags.Mask getFilterLevel(Diags.EventLevel level);
472
473 internal:
474
475 const UInt16 VERSION = 1;
476
477 /*!
478 * ======== filterOutEvent ========
479 */
480 @DirectCall
481 Bool filterOutEvent(Diags.Mask mask);
482
483 /*!
484 * ======== Module_State ========
485 */
486 struct Module_State {
487 Int partitionId;
488 Diags.Mask level1;
489 Diags.Mask level2;
490 Diags.Mask level3;
491 SharedObj *sharedObj;
492 Char sharedBuffer[];
493 Bits16 serial;
494 Bool enabled;
495 };
496
497 /*!
498 * ======== SharedObj ========
499 */
500 struct SharedObj {
501 Bits32 headerTag;
502 Bits32 version;
503 Bits32 numPartitions;
504 Char *endPtr;
505 volatile Char *readPtr;
506 Char *writePtr;
507 Char *buffer;
508 Bits32 bufferSizeMAU;
509 Bits32 droppedEvents;
510 Bits16 moduleId;
511 Bits16 instanceId;
512 Bits16 decode;
513 Bits16 overwrite;
514 };
515 }