March 2021 to May 2021
Solo Project
A project focusing on creating tools and expanding the use of Unreal Engine for a 3D unit management simultanious networked multiplayer game. In this, I explored ways developers can mix the use of C++ and Blueprints in a project and how to best spend time when building a game and other tools.
Features
- Simultanious networked multiplayer
- 3D Tilemap Editing Tool
- Custom C++ and Blueprint data types
Tilemap Editor
Purpose
Making grid based games in 2D has been done fairly well, in tools such as Tiled and the build in Tilemap tools in Unity and Godot. Doing so in a 3D game is a little more tricky, as there aren’t as many tools readily available. Some exist for Unity, but there does not seem to be any available for Unreal Engine (or Godot). Since I needed an easy way to construct levels in a 3D space with cube shaped models, a 3D tilemap tool was my first priority. I gave myself 4 weeks to do so.
Process
Something like clicking on the level to place a tile seemed out of the question for the time frame of the project. So I needed to break down the basics of a map tool. In order to get the tilemap tool working, I needed at least four things: selection of the tiles, the position of the tiles, the size of the tiles in the map, and the ability to place a tile in the level. To get the tiles, I created a Primary Data Asset to hold the tile model and an icon to show the user the tiles they can choose from. These Tile Assets can be loaded on demand to create new buttons for choosing the tile to place. The position of the tile, size of the tile, and ability to place the tile in the level are all tied together. The user supplies the size of the tile, and every time the user places a new tile by clicking the button, the Y position is incremented by the size of the tiles. The text in the text box is updated to reflect the change. The user can also arbitrarily change the position of where the tile will be placed. There didn’t seem to be a good way to keep track of these values if the tool was closed and reopened, however, so the user has to input the position of where they last left off or where they want to be.
Blueprints of how tiles are spawned
Tilemap Editor UI
Result
The final UI of the tool was wrapped up as a Utility Blueprint that the user can launch at anytime. It ticks all the checkboxes that were needed for this tool to hit its minimum viable product. While not perfect, this is room for this tool to grow and become something for other people to use for their own games.
The final Tilemap in action
C++ and Blueprints
Purpose
Blueprints is a great tool for making games in Unreal fast, but C++ can result in more readable code if done right. C++ can also be used to create new data types in the engine for other users to create Blueprints from. Thus, I went into the project trying to understand the best uses of C++ and Blueprints in the same project and where I should spend my time.
Process
The first tool that I set out to build entirely in C++ was the 3D tilemap editor. Unreal has a UI framework called Slate which is used for creating editor tools, and also is what most of the engine is built with. Slate has some good examples on how to create UI, however I quickly realized that the amount of work required to quickly iterate on the layout and functions of the tool would require more time than I had to spend. Therefore, I used Unreal’s Editor Utility Widget Blueprint to build out the UI for the Tilemap editor visually. This was a good choice, as I didn’t have to worry about the specifics of placing items using code. All of the functionality of the buttons and text fields is done in Blueprint scripting, which for the most part didn’t require me to make new methods.
When it came to getting the icon and mesh for the tiles, I realized that Blueprint classes would not be a good use of storing the information. I found Primary Data Assets were great for what I needed, since all I needed was references to data. Making a simple C++ class with public references to a Static Mesh and a UI is all that was needed for this information.
Example Tile Data Asset UI All of the code needed for the Tile Data Asset
Placing the tiles in the level uses Blueprints and references the information that is in the Tile Data Assets. More information about the functions of the Tilemap Editor, which are created in Blueprints, can be found above.
When it came to gameplay, C++ and Blueprints seemed like they would be used interchangably. Spawning the units that the player controlls was thing I tackled in gameplay ++, and it was the easiest in terms of implementation, with good examples of spawning actors in the Unreal documentation and community posts.
Code for spawning in the units that the player controls
When it came to building the Player Controller, C++ seemed like the reasonable choice but as I went on I found myself running into issues with referencing my custom pawn used for the units that the player controls in Blueprint functions that I was using. I tried for days to fix the issues I was experiencing setting and getting the current unit being controlled and all the units that the player can control in the game, but came to the conclussion that for this project that all of the control of gameplay should be controlled by Blueprint scripting. This led to gameplay functions being built in Blueprints during the latter half of the project.
Part of the Player Controller’s Blueprints
Result
In Unreal Engine, there is a lot of flexibility when it comes to using Blueprints and C++. In this project, I found that data and class variables were best held in C++, as they usually don’t change too much throughout a project which reduces compile times and doesn’t break any Blueprints which rely on the class. Class methods that stay relatively constant also tend to work well in a C++ project for this same reason. Blueprints are a great tool for prototyping gameplay that might be changing at a rapid pace in the design process or for elements that are easier to change visually. Some custom data types and classes also don’t translate well from C++ to Blueprints which can make it difficult or impossible to modify variables, so creating these structure in Blueprints makes sense as well.


My professional traveling schedule and visits. For .pdf files of my talks, please see "Talks and posters".
2019
- • International Conference on Preconditioning Techniques for Scientific and Industrial Applications, July 1st-July 3rd, Minneapolis, MN, USA. (I am also a member of the local organizing committee).
- • SIAM Conference on Computational Science and Engineering, February 25th-March 1st, Spokane, WA, USA.
2018
- • Conference on Fast Direct Solvers, November 9th-November 11th, West Lafayette, IN, USA.
- • Visiting the Intel Parallel Research Labs, May 23th-May 25th, Santa Clara, CA, USA.
- • Visiting the Center for Computing Research at Sandia National Laboratory, April 17th-April 19th, Albuquerque, NM, USA.
- • Midwest Numerical Analysis Day 2018, April 14th-April 15th, Lawrence, KA, USA.
- • 15th Copper Mountain Conference On Iterative Methods, March 25th-March 30th, Copper Mountain, CO, USA.
2017
- • Visiting Argonne National Laboratory (Hosts: Anthony Austin, Oana Marin), November 5th-November 11th, Lemont, IL, USA.
- • 21st Conference of the International Linear Algebra Society, July 24th-July 28th, Ames, IA, USA.
- • Visiting Purdue University (Host: Petros Drineas), July 1st-July 4th, West Lafayette, IN, USA.
- • PETSc User Meeting 2017, June 14th-June 16th, Boulder, CO, USA.
- • Visiting Purdue University (Host: Petros Drineas), April 16th-April 19th, West Lafayette, IN, USA.
- • SIAM Conference on Computational Science and Engineering, February 27th-March 3rd, Atlanta, GA, USA.
2016
- • The International Conference for High Performance Computing, Networking, Storage and Analysis 2016, November 13th-November 18th, Salt Lake City, UT, USA.
- • Visiting Purdue University (Host: Petros Drineas), October 6th-October 10th, West Lafayette, IN, USA.
- • Midwest Numerical Analysis Day 2016, April 26th, La Crosse, WI, USA.
2015
- • SIAM Conference on Applied Linear Algebra, October 26th-October 30th, Atlanta, GA, USA.
- • SIAM Conference on Computational Science and Engineering, March 14th-March 18th, Salt Lake City, UT, USA.


|
Connected Home over IP
672cf7684
|
Iterator for the list of system network interfaces. More...
#include <inet/InetInterface.h>
Public Member Functions | |
| InterfaceIterator () | |
| Constructs an InterfaceIterator object. More... | |
| ~InterfaceIterator () | |
| Destroys an InterfaceIterator object. More... | |
| bool | HasCurrent () |
| Test whether the iterator is positioned on an interface. More... | |
| bool | Next () |
| Advance the iterator to the next network interface. More... | |
| InterfaceId | GetInterface () |
Deprecated alias for GetInterfaceId(void) More... | |
| InterfaceId | GetInterfaceId () |
| Returns the network interface id at the current iterator position. More... | |
| INET_ERROR | GetInterfaceName (char *nameBuf, size_t nameBufSize) |
| Get the name of the current network interface. More... | |
| bool | IsUp () |
| Returns whether the current network interface is up. More... | |
| bool | SupportsMulticast () |
| Returns whether the current network interface supports multicast. More... | |
| bool | HasBroadcastAddress () |
| Returns whether the current network interface has a broadcast address. More... | |
Static Public Attributes | |
| static constexpr size_t | kMaxIfNameLength = 13 |
Protected Attributes | |
| struct netif * | mCurNetif |
Iterator for the list of system network interfaces.
Use objects of this class to iterate the list of system network interfaces.
Methods on an individual instance of this class are not thread-safe; however separate instances may be used simultaneously by multiple threads.
On multi-threaded LwIP systems, instances are thread-safe relative to other threads accessing the global LwIP state provided that the other threads hold the LwIP core lock while mutating the list of netifs, and that netif object themselves are never destroyed.
On sockets-based systems, iteration is always stable in the face of changes to the underlying system's interfaces.
On LwIP systems, iteration is stable except in the case where the currently selected interface is removed from the list, in which case iteration ends immediately.
|
inline |
Constructs an InterfaceIterator object.
Starts the iterator at the first network interface. On some platforms, this constructor may allocate resources recycled by the destructor.
|
inline |
Destroys an InterfaceIterator object.
Recycles any resources allocated by the constructor.
|
inline |
Deprecated alias for GetInterfaceId(void)
|
inline |
Returns the network interface id at the current iterator position.
| INET_NULL_INTERFACEID | if advanced beyond the end of the list. |
| id | the current network interface id. |
| INET_ERROR chip::Inet::InterfaceIterator::GetInterfaceName | ( | char * | nameBuf, |
| size_t | nameBufSize | ||
| ) |
Get the name of the current network interface.
| [in] | nameBuf | region of memory to write the interface name |
| [in] | nameBufSize | size of the region denoted by nameBuf |
| INET_NO_ERROR | successful result, interface name written |
| INET_ERROR_INCORRECT_STATE | iterator is positioned beyond the end of the list |
| INET_ERROR_NO_MEMORY | name is too large to be written in buffer |
| other | another system or platform error |
Writes the name of the network interface as NUL
terminated text string at nameBuf
.
| bool chip::Inet::InterfaceIterator::HasBroadcastAddress | ( | ) |
Returns whether the current network interface has a broadcast address.
true
if current network interface has a broadcast address, false
if not, or if the iterator is positioned beyond the end of the list.
|
inline |
Test whether the iterator is positioned on an interface.
Test whether the iterator is positioned on an interface address.
true
if the iterator is positioned on an interface; false
if positioned beyond the end of the interface list.true
if the iterator is positioned on an interface address; false
if positioned beyond the end of the address list. | bool chip::Inet::InterfaceIterator::IsUp | ( | ) |
Returns whether the current network interface is up.
true
if current network interface is up, false
if not or if the iterator is positioned beyond the end of the list. | bool chip::Inet::InterfaceIterator::Next | ( | ) |
Advance the iterator to the next network interface.
false
if advanced beyond the end, else true
.Advances the internal iterator to the next network interface or to a position beyond the end of the interface list.
On multi-threaded LwIP systems, this method is thread-safe relative to other threads accessing the global LwIP state provided that: 1) the other threads hold the LwIP core lock while mutating the list of netifs; and 2) netif objects themselves are never destroyed.
Iteration is stable in the face of changes to the underlying system's interfaces, except in the case of LwIP systems when the currently selected interface is removed from the list, which causes iteration to end immediately.
| bool chip::Inet::InterfaceIterator::SupportsMulticast | ( | ) |
Returns whether the current network interface supports multicast.
true
if current network interface supports multicast, false
if not, or if the iterator is positioned beyond the end of the list.
|
staticconstexpr |
|
protected |


Katari:
Thank you! Now we can finally get some peace and quiet...
I understand that there was a traitor among the Ol Mahums...who is it?
I am concerned about the other Ol Mahums. I must see to their safety. Please capture that betrayer! Please!


[§431:26-109] Penalties. A violation of this article shall result in penalties as provided in this chapter. [L 2017, c 191, pt of §1]


| Interface | Description |
|---|---|
| BoundaryNodeRule |
An interface for rules which determine whether node points
which are in boundaries of
Lineal geometry components
are in the boundary of the parent geometry collection. |
| PointInRing |
An interface for classes which test whether a
Coordinate lies inside
a ring. |
| Class | Description |
|---|---|
| Angle |
Utility functions for working with angles.
|
| BoundaryNodeRule.EndPointBoundaryNodeRule |
A
BoundaryNodeRule which specifies that any points which are endpoints
of lineal components are in the boundary of the
parent geometry. |
| BoundaryNodeRule.Mod2BoundaryNodeRule |
A
BoundaryNodeRule specifies that points are in the
boundary of a lineal geometry iff
the point lies on the boundary of an odd number
of components. |
| BoundaryNodeRule.MonoValentEndPointBoundaryNodeRule |
A
BoundaryNodeRule which determines that only
endpoints with valency of exactly 1 are on the boundary. |
| BoundaryNodeRule.MultiValentEndPointBoundaryNodeRule |
A
BoundaryNodeRule which determines that only
endpoints with valency greater than 1 are on the boundary. |
| CentralEndpointIntersector | Deprecated |
| Centroid |
Computes the centroid of a
Geometry of any dimension. |
| CentroidArea | Deprecated
use Centroid instead
|
| CentroidLine | Deprecated
use Centroid instead
|
| CentroidPoint | Deprecated
use Centroid instead
|
| CGAlgorithms |
Specifies and implements various fundamental Computational Geometric
algorithms.
|
| CGAlgorithms3D |
Basic computational geometry algorithms
for geometry and coordinates defined in 3-dimensional Cartesian space.
|
| CGAlgorithmsDD |
Implements basic computational geometry algorithms using
DD arithmetic. |
| ConvexHull |
Computes the convex hull of a
Geometry . |
| HCoordinate |
Represents a homogeneous coordinate in a 2-D coordinate space.
|
| InteriorPointArea |
Computes a point in the interior of an areal geometry.
|
| InteriorPointLine |
Computes a point in the interior of an linear geometry.
|
| InteriorPointPoint |
Computes a point in the interior of an point geometry.
|
| LineIntersector |
A
LineIntersector is an algorithm that can both test whether
two line segments intersect and compute the intersection point(s)
if they do. |
| MCPointInRing | |
| MinimumBoundingCircle |
Computes the Minimum Bounding Circle (MBC)
for the points in a
Geometry . |
| MinimumDiameter |
Computes the minimum diameter of a
Geometry . |
| NonRobustCGAlgorithms |
Non-robust versions of various fundamental Computational Geometric algorithms,
FOR TESTING PURPOSES ONLY!.
|
| NonRobustLineIntersector |
A non-robust version of
LineIntersector . |
| PointLocator | |
| RayCrossingCounter |
Counts the number of segments crossed by a horizontal ray extending to the right
from a given point, in an incremental fashion.
|
| RectangleLineIntersector |
Computes whether a rectangle intersects line segments.
|
| RobustCGAlgorithms | Deprecated
use CGAlgorithms instead
|
| RobustDeterminant |
Implements an algorithm to compute the
sign of a 2x2 determinant for double precision values robustly.
|
| RobustLineIntersector |
A robust version of
LineIntersector . |
| SimplePointInRing |
Tests whether a
Coordinate lies inside
a ring, using a linear-time algorithm. |
| Exception | Description |
|---|---|
| NotRepresentableException |
Indicates that a
HCoordinate has been computed which is
not representable on the Cartesian plane. |


Task And Work
Issued date: 24-12-2019
Submission date: 26-12-2019
Desciption: Chapter 1 and 2 with diagrams
Issued date: 24-12-2019
Submission date: 26-12-2019
Desciption: Chapter 1 and 2 with diagrams
Issued date: 24-12-2019
Submission date: 26-12-2019
Desciption: Chapter 1 and 2 with diagrams


FITSio: FITS (Flexible Image Transport System) Utilities
Utilities to read and write files in the FITS (Flexible
Image Transport System) format, a standard format in astronomy (see
e.g. <https://en.wikipedia.org/wiki/FITS> for more information).
Present low-level routines allow: reading, parsing, and modifying
FITS headers; reading FITS images (multi-dimensional arrays);
reading FITS binary and ASCII tables; and writing FITS images
(multi-dimensional arrays). Higher-level functions allow: reading
files composed of one or more headers and a single (perhaps
multidimensional) image or single table; reading tables into
data frames; generating vectors for image array axes; scaling and
writing images as 16-bit integers. Known incompletenesses are
reading random group extensions, as well as
bit, complex, and array descriptor data types in binary tables.
| Version: |
2.1-0 |
| Depends: |
R (≥ 3.0.0) |
| Published: |
2016-11-26 |
| Author: |
Andrew Harris |
| Maintainer: |
Andrew Harris <harris at astro.umd.edu> |
| License: |
GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: |
no |
| Materials: |
ChangeLog |
| In views: |
ChemPhys |
| CRAN checks: |
FITSio results |
Downloads:
Reverse dependencies:
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=FITSio
to link to this page.


A.P.C. Opens Café in Paris
The ready-to-wear brand is opening a pop-up coffee shop serving its own coffee blend at the Galerie Joyce in Paris.
by Fleur BurletCOFFEE CHIC: A.P.C. is branching out into coffee.
Following the footsteps of Maison Kitsuné and Jacquemus — who have both opened restaurants in Paris this year — the ready-to-wear brand is the latest label to add hospitality to its range.
From Nov. 20 to Jan. 31, A.P.C. will take over the Galerie Joyce near the Palais-Royal garden in the 1st arrondissement of Paris where it will install a pop-up coffee shop.
All the drinks on the menu will be made with the brand’s own blend of beans, the Moka, which will also be available to purchase on site.
“There won’t be a choice. Having a choice makes you worry,” A.P.C. founder and creative director Jean Touitou said in a statement. “Not having one creates a kind of peace of mind. I like to trust others and I would like others to trust us for the choice of this coffee origin.”

The space will also host events: From Jan. 8, visitors of the Café A.P.C. will be able to take in an exhibition of the brand’s archives by Jessica Ogden.


FRANKENSTEIN UNBOUND A film review by Ron Rejmaniak Copyright 1990 Ron Rejmaniak
I saw this film tonight and liked what I saw. The return of Roger Corman to directing and a thinking horror film.
Roger Corman's directing doesn't have any cinematic moments and isn't filled with stylish touches (like Ridley Scott's) but shows the work of a man who knows his craft returning to work. It is very able directing and adding that he hasn't worked on a film other than as a producer for ~15 years, shouldn't draw too many complaints. I will add that it is atmospheric. One of my friends compares the atmosphere to that of Corman's Poe films (he's only seen the second half of this film though...)
The film casts John Hurt as Buchanan, a weapons scientist who finds himself sent back in time to Geneva in 1817. Buchanan's first encounter in this strange land is with another scientist, Victor Frankenstein, played by Raul Julia. Buchanan also encounters Bridget Fonda as Mary Shelley who was beginning her novel FRANKENSTEIN at this time. Needless to say, the acting is top-notch including the actor who plays the monster.
The film deals with Buchanan reflecting on his role in science, drawing parallels to Frankenstein and his semi-thinking creation. The film was shot on location in Italy and the costuming is good. The soundtrack works well with the film. There is little blood and gore despite the R rating and is well served when used. This is a thinking horror film with not a lot of action or scares. We haven't had a horror film like this since the 1970s. (I'm *not* saying that this film is very thought-provoking *after* the film but it does sustain interest during the film).
I heartily recommend this film and am sort of glad that it wasn't hyped up as a Halloween horror film. I'd list it as one of the best (if not the best) horror films of the year and among the better films of any type this year.
This film may be getting a limited release (if any nationwide) even though it is being distributed by 20th Century Fox. I saw only one small ad this weekend (out of several newspapers) and no tv ads or theatrical trailers for this film. There weren't even any reviews in the papers for this film. I find it odd that this film isn't getting noticed in its release since director Roger Corman was everywhere this summer on tv and in print discussing his old films (and actors/actresses/directors he discovered/trained), his new book *on* his old films etc., and discussing his new film FRANKENSTEIN UNBOUND (sans film clips though).
In Boston it has an "exclusive engagement" on what I believe to be the largest screen (not theater capacity) in a Boston movie theater, the Charles. At the 9:40 PM Friday showing there were a total of 17 people there. I don't think it's going to stay there long with that kind of attendance. I wonder how the movie would have done with more promotion....
I give a Joe Bob Briggs type 3B count: this film has blood, 2 beasts, and possibly 1 breast (may be prosthetic). Look for Frankenstein's improvements of people including 2 thumbs...
-Ron Rejmaniak
[Moderator's Note: I believe the film is opening in a limited release for a couple of weeks and then "opening wide," as they say.] .
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


Interview with Katherine, teacher
[standard introduction]
What is your background with the QFI project, do you feel like you understand what is going on?
Well, I haven't talked a whole lot about it ... I haven't really heard [since the first meeting].
[Explain a little more, relaxing, friendly tone, establish personable accessible relationship]
OK, what is your background as a teacher?
My teaching experience is very limited because I am a new teacher. Previously taught in charlstown, MA...
What was the technology like in that school?
They used the internet in class mostly to watch videos. Rana (who was in DC, was a teacher in DC with us) setup a voice mailbox. Their homework might be to read a certain passage. You had to chase after the students to remind. She was taeching teh class and Katherine came in at the end of the week. ... I think I would do that again if I had the chance. The school Boston Arts Academy -- the school is working on seeing if they can get computers for the students. In my class we do have computers in class, but as far as the voice mailbox would [be better] because the vast majority of them do have telephones. If there was some way to get those messages on the computer for me to listen to or for them to re-listen to, or maybe have other students listen to them.
- voicemail
- teacher_assistance
- phone
- practice
- homework
[Perhaps students speak who arabic?]
We had talked about doing that with charlestown -- [international progam] ... it's possible. We were supposed to do video conferencing, but I think it took a really long time to setup -- I don't know if they really want us to do that again, but it seems like voice messages, simple introductory, would maybe work ...
[How does curriculum development work? ]
We the teachers in collaboration with QFI are talking about what we are interested in doing. It is fairly loose, but the original currculum is something that QFI gave us. There is a modified one in the process of typing it up.
- curriculum
- todo
[TODO: get a copy of curriculum. Asked. ]
[Other platforms? Systems that are useful? ]
Having a place to upload multiple videos and audo -- we have a system called EdLIne. We can email all the stydents. Making audio recordings of all of the vocabulary words for our students -- we need a place to upload the recording to the website.
- software: edline
- software: upload recordings
Sometimes brings cds to class - students.
can you tell me more about edline?
This is their first year using edline. Does grading. Setup so we can all have pages for all of the course that we are teaching. When a student or a parent logs in, a student can click on his calendar will have all of his homework.
[TODO: get a login to edline. (via Chris D.)]
Just a few more questions. what do you use on the web?
[Used facebook when she was in college.] Don't use twitter and don't plan on it. Has experience with livejournal. [probably was a blogger.]
How long do you sit at the computer each day
Too long!
What is your technology like at home?
[has a computer at house. / has good wifi at home (lives with her parents) / moving later this week]
We do have internet at school but we just started training and haven't really been using computers. Using technology is one of the goals for the school. They do have some sites blocked -- you can't access facebook or youtube from.
- teacher: home tech life
- school: restrictions on websites
- school: has it's own goals
[others at school? What is their technology use like?]
Most of them use computers frequently. The impression is that the school moves very fast -- if you don't check your email you will fall behind. There is a computer lab at the school with new macs.
What is the school website?
http://www.edline.net/pages/Boston_Arts_Academy
[Why not use Twitter? Anything in particular about it that you don't like?]
Not so much anything about the design -- I guess I don't feel the need to tweet, to update people on what I am doing most of the time -- it's just sort of a lifestyle. Privacy concern? It's not a dislike, just a lack of interest.
- teacher: preferences
What should we not build?
I don't really have a problem with forums as long as it is EASY TO READ. some websites, the color scheme makes it very hard to read. letters are everywhere -- i usually just turn away because it is too much work.
- readbility: highly desired
- teacher: attitude toward tech
What is your curriculum development process like?
we don't have a textbook for our class, we sometimes use a college arabic textbook as a resource. a lot of what we are doing is creating the materials ourselves.
we do searching on the internet for pictures, videos, clips from TV shows, culutural things that we can use. The grammar stuff is worksheets that we type up ourselves.


Todo
{{task.taskName}}
{{task.description}}
Assigned to:
{{task.assignedToName}}
fast_forward
person_outline
delete
Ongoing
{{task.taskName}}
{{task.description}}
Assigned to: {{task.assignedToName}}
fast_rewind
done
person_outline
delete
Done
{{task.taskName}}
{{task.description}}
check_box
Assigned to: {{task.assignedToName}}
fast_rewind
person_outline
delete


The Agile Manifesto, Principle No. 10: "Simplicity"
Simplicity - the art of maximizing the amount of work not done - is essential.


File Metadata Microservice description
- User can submit a FormData object that includes a file upload:
- When user submits something, server returns the file size in bytes within the JSON response:
[{"when":"2016-01-28 18:53","size":"3","name":"fl-upl.test"}]
- User can browse recent queries like this:
- User can clear stored queries data like this:


I perceive the mind and the body are two separate entities. At birth, we were presented with this body for our soul to inhibit. It has many predisposed to certain traits and qualities, bound by our genetics. It serves as a baseline for the capabilities and personality for this human body. Throughout the course of our life, we gradually gain a better understanding of our body. From learning which foods and activities it finds pleasure in to which virtues in life it places the most importance in, we are constantly learning more and more about the intricacies of the human body.
It can be a little confusing to describe how I envision it, but here is an analogy that may better capture my thoughts. I picture the human body as a complex instrument and the soul as a musician. At birth, the soul has never picked up this instrument before. Gradually, with time and effort the soul becomes more adequate in handling this intricate instrument. It may never become a master, but it is about the journey, not the destination.
This is very abstract thinking, so let me bring it back to myself.  I think I am at a point where I can reflect on my personal journey and how my soul has reached the point it is right now. Here is what I have learned about myself. This is pretty personal, but I am using this as a medium to note where I am at this point in my life. Who knows, I may be a totally different person down the road. I will refer to my body in the third person and my soul in the first.
Since a very young age, Kedar has expressed a delicate fondness of the world around him, displayed calmness in the most stressful situations, embraced independence, and unafraid of being alone and silence. He prefers being well-rounded over specialized, and this is pertinent in everything, including knowledge, sports, food, and hobbies. Although he is fundamentally the same, he has definitely evolved over the years, as has any human being. He has become a lot more extroverted, vocal, a better leader, and more firm and opinionated.
As the soul, I have observed this transition and help set goals with
Kedar has always been a quiet person who enjoys silence and basking in his own thoughts. Silence is comforting, it gives him a sense of peace and calm. He gets excited to start new projects, but finds himself getting bored or losing focus quickly. He possesses the work ethic, but only utilizes it when it is something he is really passionate about. Over time, he has developed his social skills


--- layout: post status: publish published: true title: Ron Santo's Quotes of the Day - 4/28/2010 author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 2560 wordpress_url: http://ivyenvy.com/?p=2560 date: '2010-04-28 16:05:29 +0000' date_gmt: '2010-04-28 22:05:29 +0000' categories: - Broadcasters/Networks tags: - Ron Santo - Quote of the Day - Pat Hughes - Judd Sirott - Wil Nieves comments: - id: 1276 author: jswanson author_email<EMAIL_ADDRESS>author_url: http://swantron.com date: '2010-04-29 20:23:17 +0000' date_gmt: '2010-04-30 02:23:17 +0000' content: Ronnie pulls out some gems...no argument there. My favourite is his classic "gaaaahd" when Theriot boots a routine ball, Sori Ks, or anyone in the bullpen throws a ball. Good times. ---
Day games in the Spring means that I forced to listen to the radio broadcasts of Cubs games. At some point, we will have a discussion on the podcast about broadcasters. It’s a conversation that is long overdue. I am not a Ron Santo fan. I understand why people enjoy listening to Ron, but I like a little analysis from my color commentary. But since I listened to the radio broadcast, I’d like to throw out a couple of Ron’s quotes from today’s game. If you listened to the game, I’m sure you cocked your head in confusion just as I did when he uttered them.
“We can’t ill-afford to leave a runner on base.”
“Wil Nieves – his real name is Wilbert, and that’s short for Wil.”
With that last quote, Judd Sirott seemed stunned and speechless. Judd is not nearly as seasoned as Pat Hughes in maneuvering Ron through a conversation. Pat is the only tolerable aspect of the radio broadcast and Judd just really isn’t that good. Neither he nor Ron can describe a play. I had no idea what Marlon Byrd did in the field that both described as one of the finest plays they’d ever seen and would surely be the top play of the day in baseball. All I could figure out is that it involved a back-handed catch and maybe it was behind him.


Film review by Kevin Patterson
Ed Wood (R, 1994) Directed by Tim Burton. Written by Scott Alexander and Larry Karaszewski. Starring Johnny Depp, Martin Landau, Sarah Jessica Parker, Patricia Arquette.
Ed Wood has been billed as a comedy, and its material certainly seems like the perfect material for laughs. After all, this is the story of Ed Wood, the universally acclaimed Worst Director of All Time and the man responsible for the cinematic disasters Glen or Glenda? and Plan 9 From Outer Space , among others. But when I heard that the film was directed by Tim Burton, who has a reputation for championing the lonely outsider in films such as Edward Scissorhands and Batman, I thought that it really might be something else. Maybe this movie would actually show us Ed Wood as a human being rather than a caricature, the Ed Wood that was determined to make movies and to make them his way, the Ed Wood that was blissfully unaware of his own lack of talent.
And indeed it did. That's not to say that the film isn't funny, which it certainly is. But it's more than that: Wood, played here by Johnny Depp, ultimately emerges as a sympathetic character. This is not because the film waters down Wood's lack of talent; the script devotes considerable attention to the making of Glen or Glenda?, Bride of the Monster, and of course Plan 9 and does not attempt to portray them as anything other than scatterbrained nonsense. Nor does it apologize for him by suggesting that it wasn't really his fault that his movies were bad; in fact, his sponsors try to interfere and bring some sense to Plan 9, but he refuses to listen to their suggestions.
Yet Wood comes across as a likeable human being. He is certainly dedicated and enthusiastic about his profession, however incompetent he may be. And if the film is historically accurate, he was one of the few true friends that actor Bela Lugosi (Martin Landau) had in the last years of his lonely, drug-addicted existence. Wood, Lugosi, and the others involved in Wood's films, most of them occupying the fringes of society (Wood himself was a known transvestite), may have been dismal failures in terms of the quality of the movies they made, but Burton portrays their cinematic misadventures with an odd romantic touch that makes it hard not to admire their perseverance. Wood's relationship with his girlfriend and later wife Kathy Johnson (Patricia Arquette) is treated much the same way; their idea of a romantic evening seems to be sitting on the couch reading a book about space invaders from Mars, but their goofy innocence is admired much more than it is mocked. Near the end of the film, when Wood firmly tells his sponsors that their suggestions for Plan 9 From Outer Space would not be needed, I actually found myself cheering for him as he and his crew managed to realize the project in all its stupidity.
What Burton and screenwriters Alexander and Karaszewski seem to be saying is that yes, of course Ed Wood was a nut, but if all this silliness made some sense to him and those around him at the time, then maybe everyone else should at the very least leave him alone. This is certainly an understandable sentiment from Burton; when a movie mogul chews Wood out for playing Glen or Glenda? as an (albeit mishandled) attempt at social commentary rather than the sensationalist exploitation flick that he wanted, I cannot help but think of those who slammed Burton for making Batman Returns into a dark, psychologically unsettling film rather than the campy superhero movie that was expected. Ed Wood does not have the visual flash of Burton's other work (it is shot in black and white), but at the same time it is probably his best and most personal film. They are light-years apart in terms of talent, of course, but in a way I can see Tim Burton and Ed Wood as kindred spirits: two filmmakers determined to do things their own way, regardless of the pressure from above.
Burton and his writers are making a pretty extreme statement in Ed Wood -that nothing, not even lack of talent, should stand in the way of dedication and honesty when it comes to art. Whether you agree or not, this film is probably just about the best argument there is for such a position. Along with the Coens' Barton Fink, Ed Wood is one of the most off-beat, and one of the best, films to tackle the entertainment industry in recent years.
Grade: A+
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


java.io.Serializable
public final class LocalDateRange
extends java.lang.Object
implements java.io.Serializable
A LocalDateRange
represents a range of dates, from a start date to an end date.
Instances can be constructed from either a half-open or a closed range of dates.
Internally, the class stores the start and end dates, with the start inclusive and the end exclusive.
The end date is always greater than or equal to the start date.
The constants LocalDate.MIN
and LocalDate.MAX
can be used
to indicate an unbounded far-past or far-future. Note that there is no difference
between a half-open and a closed range when the end is LocalDate.MAX
.
Date ranges are not comparable. To compare the length of two ranges, it is generally recommended to compare the number of days the contain.
This class must be treated as a value type. Do not synchronize, rely on the identity hash code or use the distinction between equals() and ==.
| Modifier and Type | Field | Description |
|---|---|---|
static LocalDateRange |
ALL |
A range over the whole time-line.
|
| Modifier and Type | Method | Description |
|---|---|---|
boolean |
abuts(LocalDateRange other) |
Checks if this range abuts the specified range.
|
boolean |
contains(java.time.LocalDate date) |
Checks if this range contains the specified date.
|
boolean |
encloses(LocalDateRange other) |
Checks if this range encloses the specified range.
|
boolean |
equals(java.lang.Object obj) |
Checks if this range is equal to another range.
|
java.time.LocalDate |
getEnd() |
Gets the end date of this range, exclusive.
|
java.time.LocalDate |
getEndInclusive() |
Gets the end date of this range, inclusive.
|
java.time.LocalDate |
getStart() |
Gets the start date of this range, inclusive.
|
int |
hashCode() |
A hash code for this range.
|
LocalDateRange |
intersection(LocalDateRange other) |
Calculates the range that is the intersection of this range and the specified range.
|
boolean |
isAfter(java.time.LocalDate date) |
Checks if this range is after the specified date.
|
boolean |
isAfter(LocalDateRange other) |
Checks if this range is after the specified range.
|
boolean |
isBefore(java.time.LocalDate date) |
Checks if this range is before the specified date.
|
boolean |
isBefore(LocalDateRange range) |
Checks if this range is before the specified range.
|
boolean |
isConnected(LocalDateRange other) |
Checks if this range is connected to the specified range.
|
boolean |
isEmpty() |
Checks if the range is empty.
|
boolean |
isUnboundedEnd() |
Checks if the end of the range is unbounded.
|
boolean |
isUnboundedStart() |
Checks if the start of the range is unbounded.
|
int |
lengthInDays() |
Obtains the length of this range in days.
|
static LocalDateRange |
of(java.time.LocalDate startInclusive,
java.time.LocalDate endExclusive) |
Obtains a half-open range of dates, including the start and excluding the end.
|
static LocalDateRange |
of(java.time.LocalDate startInclusive,
java.time.Period period) |
Obtains an instance of
LocalDateRange from the start and a period. |
static LocalDateRange |
ofClosed(java.time.LocalDate startInclusive,
java.time.LocalDate endInclusive) |
Obtains a closed range of dates, including the start and end.
|
boolean |
overlaps(LocalDateRange other) |
Checks if this range overlaps the specified range.
|
static LocalDateRange |
parse(java.lang.CharSequence text) |
Obtains an instance of
LocalDateRange from a text string such as
2007-12-03/2007-12-04 , where the end date is exclusive. |
LocalDateRange |
span(LocalDateRange other) |
Calculates the smallest range that encloses this range and the specified range.
|
java.util.stream.Stream<java.time.LocalDate> |
stream() |
Streams the set of dates included in the range.
|
java.time.Period |
toPeriod() |
Obtains the length of this range as a period.
|
java.lang.String |
toString() |
Outputs this range as a
String , such as 2007-12-03/2007-12-04 . |
LocalDateRange |
union(LocalDateRange other) |
Calculates the range that is the union of this range and the specified range.
|
LocalDateRange |
withEnd(java.time.temporal.TemporalAdjuster adjuster) |
Returns a copy of this range with the end date adjusted.
|
LocalDateRange |
withStart(java.time.temporal.TemporalAdjuster adjuster) |
Returns a copy of this range with the start date adjusted.
|
public static final LocalDateRange ALL
public static LocalDateRange of(java.time.LocalDate startInclusive, java.time.LocalDate endExclusive)
The range includes the start date and excludes the end date, unless the end
is LocalDate.MAX
.
The end date must be equal to or after the start date.
This definition permits an empty range located at a specific date.
startInclusive
- the start date, inclusive, LocalDate.MIN treated as unbounded, not nullendExclusive
- the end date, exclusive, LocalDate.MAX treated as unbounded, not nulljava.time.DateTimeException
- if the end is before the startpublic static LocalDateRange ofClosed(java.time.LocalDate startInclusive, java.time.LocalDate endInclusive)
The range includes the start date and the end date. The end date must be equal to or after the start date.
startInclusive
- the inclusive start date, LocalDate.MIN treated as unbounded, not nullendInclusive
- the inclusive end date, LocalDate.MAX treated as unbounded, not nulljava.time.DateTimeException
- if the end is before the startpublic static LocalDateRange of(java.time.LocalDate startInclusive, java.time.Period period)
LocalDateRange
from the start and a period.
The end date is calculated as the start plus the duration. The period must not be negative.
startInclusive
- the start date, inclusive, not nullperiod
- the period from the start to the end, not nulljava.time.DateTimeException
- if the end is before the start,
or if the period addition cannot be madejava.lang.ArithmeticException
- if numeric overflow occurs when adding the periodpublic static LocalDateRange parse(java.lang.CharSequence text)
LocalDateRange
from a text string such as
2007-12-03/2007-12-04
, where the end date is exclusive.
The string must consist of one of the following three formats:
LocalDate
, followed by a forward slash,
followed by a representation of a LocalDate
LocalDate
, followed by a forward slash,
followed by a representation of a Period
Period
, followed by a forward slash,
followed by a representation of an LocalDate
text
- the text to parse, not nulljava.time.format.DateTimeParseException
- if the text cannot be parsedpublic java.time.LocalDate getStart()
This will return LocalDate.MIN
if the range is unbounded at the start.
In this case, the range includes all dates into the far-past.
public java.time.LocalDate getEnd()
This will return LocalDate.MAX
if the range is unbounded at the end.
In this case, the range includes all dates into the far-future.
public java.time.LocalDate getEndInclusive()
This will return LocalDate.MAX
if the range is unbounded at the end.
In this case, the range includes all dates into the far-future.
public boolean isEmpty()
An empty range occurs when the start date equals the inclusive end date.
public boolean isUnboundedStart()
public boolean isUnboundedEnd()
public LocalDateRange withStart(java.time.temporal.TemporalAdjuster adjuster)
This returns a new instance with the start date altered.
Since LocalDate
implements TemporalAdjuster
any
local date can simply be passed in.
For example, to adjust the start to one week earlier:
range = range.withStart(date -> date.minus(1, ChronoUnit.WEEKS));
adjuster
- the adjuster to use, not nulljava.time.DateTimeException
- if the new start date is after the current end datepublic LocalDateRange withEnd(java.time.temporal.TemporalAdjuster adjuster)
This returns a new instance with the exclusive end date altered.
Since LocalDate
implements TemporalAdjuster
any
local date can simply be passed in.
For example, to adjust the end to one week later:
range = range.withEnd(date -> date.plus(1, ChronoUnit.WEEKS));
adjuster
- the adjuster to use, not nulljava.time.DateTimeException
- if the new end date is before the current start datepublic boolean contains(java.time.LocalDate date)
This checks if the specified date is within the bounds of this range.
If this range has an unbounded start then contains(LocalDate#MIN)
returns true.
If this range has an unbounded end then contains(LocalDate#MAX)
returns true.
If this range is empty then this method always returns false.
date
- the date to check for, not nullpublic boolean encloses(LocalDateRange other)
This checks if the bounds of the specified range are within the bounds of this range. An empty range encloses itself.
other
- the other range to check for, not nullpublic boolean abuts(LocalDateRange other)
The result is true if the end of this range is the start of the other, or vice versa. An empty range does not abut itself.
other
- the other range, not nullpublic boolean isConnected(LocalDateRange other)
The result is true if the two ranges have an enclosed range in common, even if that range is empty. An empty range is connected to itself.
This is equivalent to (overlaps(other) || abuts(other))
.
other
- the other range, not nullpublic boolean overlaps(LocalDateRange other)
The result is true if the the two ranges share some part of the time-line. An empty range overlaps itself.
This is equivalent to (isConnected(other) && !abuts(other))
.
other
- the time range to compare to, null means a zero length range nowpublic LocalDateRange intersection(LocalDateRange other)
This finds the intersection of two ranges. This throws an exception if the two ranges are not connected.
other
- the other range to check for, not nulljava.time.DateTimeException
- if the ranges do not connectpublic LocalDateRange union(LocalDateRange other)
This finds the union of two ranges. This throws an exception if the two ranges are not connected.
other
- the other range to check for, not nulljava.time.DateTimeException
- if the ranges do not connectpublic LocalDateRange span(LocalDateRange other)
The result of this method will enclose this range and the specified range.
other
- the other range to check for, not nullpublic java.util.stream.Stream<java.time.LocalDate> stream()
This returns a stream consisting of each date in the range. The stream is ordered.
public boolean isAfter(java.time.LocalDate date)
The result is true if every date in this range is after the specified date. An empty range behaves as though it is a date for comparison purposes.
date
- the other date to compare to, not nullpublic boolean isBefore(java.time.LocalDate date)
The result is true if every date in this range is before the specified date. An empty range behaves as though it is a date for comparison purposes.
date
- the other date to compare to, not nullpublic boolean isAfter(LocalDateRange other)
The result is true if every date in this range is after every date in the specified range. An empty range behaves as though it is a date for comparison purposes.
other
- the other range to compare to, not nullpublic boolean isBefore(LocalDateRange range)
The result is true if every date in this range is before every date in the specified range. An empty range behaves as though it is a date for comparison purposes.
range
- the other range to compare to, not nullpublic int lengthInDays()
This returns the number of days between the start and end dates.
java.lang.ArithmeticException
- if the length exceeds the capacity of an int
public java.time.Period toPeriod()
This returns the Period
between the start and end dates.
java.lang.ArithmeticException
- if the calculation exceeds the capacity of Period
public boolean equals(java.lang.Object obj)
Compares this LocalDateRange
with another ensuring that the two dates are the same.
Only objects of type LocalDateRange
are compared, other types return false.
equals
in class java.lang.Object
obj
- the object to check, null returns falsepublic int hashCode()
hashCode
in class java.lang.Object
public java.lang.String toString()
String
, such as 2007-12-03/2007-12-04
.
The output will be the ISO-8601 format formed by combining the
toString()
methods of the two dates, separated by a forward slash.
toString
in class java.lang.Object
Copyright © 2010–2018 ThreeTen.org. All rights reserved.


I wanted to create a dungeon with the results of the survey. Participators get their own room in the dungeon and the answers act as the parameters for the stuff inside. My HDD crashed, so all I got left from this project is a little mock-up animation with a character going through rooms. All those rooms where generated with real data, though.


The publications on this website have been prepared for eductional and informational purposes only and do not constitute an offer to sell, a solicitation of an offer to buy, or a recommendation of any security or any other product or service by the authors of the publications, or any other third party regardless of whether such security, product or service is referenced in the publications. None of the information or analyses presented are intended to form the basis for any investment decision, and no specific recommendations are intended.
Accordingly, the publications on this website do not constitute investment advice or counsel or solicitation for investment in any security. These publications do not constitute or form part of, and should not be construed as, any offer for sale or subscription of, or any invitation to offer to buy or subscribe for, any securities, nor should it or any part of it form the basis of, or be relied on in any connection with, any contract or commitment whatsoever.
The authors of the publications on this website expressly disclaim any and all responsibility for any direct or consequential loss or damage of any kind whatsoever arising directly or indirectly from: (i) the use of this site; (ii) reliance on any information contained herein; (iii) any error, omission or inaccuracy in any such information; or (iv) any action resulting therefrom.
Investors should seek financial advice regarding the appropriateness of investing in any securities or investment strategies discussed or recommended in this documentation and should understand that statements regarding future prospects may not be realized. Investors should note that income from such securities may fluctuate and that each security’s price or value may rise or fall. Accordingly, investors may receive back less than originally invested.
Past performance is not necessarily a guide to future performance. In consideration of being permitted access to the publication, the viewer hereby acknowledges having read and understood this agreement and agrees to be bound by its terms and conditions.
The authors of the publication take care to ensure that the information provided is accurate and up to date. However, the information on this website is provided without warranties of any kind, either expressed or implied, including but not limited to warranties of title or implied warranties of merchantability or fitness for a particular purpose. Opinions expressed herein are subject to change without notice. All information and content on this publication is furnished “as is,” without warranty of any kind, express or implied, including but not limited to implied warranties of merchantability, fitness for a particular purpose, or non-infringement.


This area is reserved to the generation of RSA public and secret key pairs. To generate a pair of RSA keys just:
Provide a name for your keys;
Click on generate rsa;
RSA secret and public keys are widely used on modern cryptography.
A pair of keys are mathematically bounded in a way that if you encrypt something with the public key, only the owner of the respective private key can decrypt.
RSA keyes are used to encrypt connections over the web, and create digital signatures.
Remember to ALWAYS keep your secret key in true secret. Is The only way to not compromise de system.
The public key, instead, you can give it to everyone you want. The ones who have it, will be able to encrypt files only for you and verify your digital signatures.


Every day, The Philadelphia Fire Department responds to hundreds or even thousands of locations to deal with an array of emergencies.
Currently, the Fire Department has little ‘situational awareness’ of fire risk for a given location when an emergency call comes in.
In this project, we aim to improve this situation by creating a new API tool, which can return two deliverables for each property in the city:
1. Parcel-level information for the building on fire and surrounding buildings
2. Parcel-level (building) fire risk assessment based on the city’s existing open datasets and past fire events
In addition, we want to let residents get a real-time update of the fire risk of their houses so they will have a situational awareness on risk for each property citywide.
Instructions:
1. Input a street address and hit the "Go" button.
2. A red marker representing the parcel will show up on the map, surrounded by some grey markers, which represented nearby parcels.
3. Click on one of the grey marker and it will automatically request data of that parcel. You can also input another address for a new request.
Some addresses:
1200 W VENANGO ST
7701 LINDBERGH BLVD
4054 1/2 LANCASTER AVE
4048 LANCASTER AVE
4058 1/2 LANCASTER AVE
1140 W VENANGO ST
3548 OLD YORK RD
3545 N CAMAC ST
1911 S GALLOWAY ST
1677 W WYOMING AVE
10904 CAREY TER
3134 MECHANICSVILLE RD
9630 WISSINOMING ST
9629 WISSINOMING ST
499 FRANKLIN MILLS CIR
3118 MAUREEN DR
3626 BISCAYNE PL
Other addresses in Philadelphia also work!


{% extends "base.html" %} {% block meta_title %}Page not found (404){% endblock %} {% block title %}
This page does not exist. Please verify the address or the link you have followed.
This page may have been archived or its address has changed. Use the top navigation to find what you are looking for.
{% endblock main %}


{% extends 'base.html' %} {% load static %} {% block title %} ISB-CGC|About {% endblock %} {% block description %} About ISB-CGC {% endblock %} {% block link_page_name %}about{% endblock %} {% block page_name %}about{% endblock %} {% block page_header %} {% if request.user.is_authenticated %}
The ISB Cancer Gateway in the Cloud (ISB-CGC) is a platform that serves as a large-scale repository and provides the computational infrastructure necessary to carry out cancer research at unprecedented scales.
Please use a Google registered email account to log into this system.
{% if version %}Please cite the original ISB-CGC paper when you use the ISB-CGC platform.
ISB-CGC is a component of the NCI Cancer Research Data Commons and has been funded in whole or in part with Federal funds from the National Cancer Institute, National Institutes of Health, Department of Health and Human Services, under Contract No. HHSN261201400008C and ID/IQ Agreement No. 17X146 under Contract No. HHSN261201500003I. The content of this publication does not necessarily reflect the views or policies of the Department of Health and Human Services, nor does mention of trade names, commercial products, or organizations imply endorsement by the U.S. Government.
You are accessing a U.S. Government (National Institute of Health (NIH), National Cancer Institute (NCI) and Institute for Systems Biology ISB) website / application which may contain information that must be protected under the U. S. Privacy Act or other sensitive information which is intended for authorized Scientific or Research use only. Network activity and Application usage is monitored to maintain system security, availability, and to ensure appropriate and legitimate usage, there is no right or expectation to privacy on this website / system. Unauthorized attempts to upload information, change information, or use of this website for other than its intended purpose may result in disciplinary action, civil, and/or criminal penalties. Any individual or system that accesses this website should have no expectation of privacy regarding any communications or data processed by this website. Anyone accessing this website expressly consents to monitoring of their actions and all communication or data transiting or stored on or related to this website and is advised that if such monitoring reveals possible evidence of criminal activity, NIH may provide that evidence to law enforcement officials.


| RGBASM(5) | File Formats Manual | RGBASM(5) |
rgbasm
—
language documentation
It is strongly recommended to have some familiarity with the Game Boy hardware before reading this document. RGBDS is specifically targeted at the Game Boy, and thus a lot of its features tie directly to its concepts. This document is not intended to be a Game Boy hardware reference.
Generally, “the linker” will refer to rgblink(1), but any program that processes RGB object files (described in rgbds(5)) can be used in its place.
[label]
[instruction]
[; comment]
Example:
John: ld a,87 ;Weee
All reserved keywords (pseudo‐ops, mnemonics, registers etc.) are case‐insensitive, all identifiers (symbol names) are case-sensitive.
Comments are used to give humans information about the code, such as explanations. The assembler always ignores comments and their contents.
There are two syntaxes for comments. The most common is that
anything that follows a semicolon ‘;
’
not inside a string, is a comment until the end of the line. The other is
that lines beginning with a ‘*
’ (not
even spaces before it) are ignored. This second syntax is deprecated (will
be removed in a future version) and should be replaced with the first
one.
Sometimes lines can be too long and it may be necessary to split them. To do so, put a backslash at the end of the line:
DB 1, 2, 3, \ 4, 5, 6, \ ; Put it before any comments 7, 8, 9
This works anywhere in the code except inside of strings. To split
strings it is needed to use STRCAT
() like this:
db STRCAT("Hello ", \ "world!")
An expression is said to be "constant" if
rgbasm
knows its value. This is generally always the
case, unless a label is involved, as explained in the
SYMBOLS section.
The instructions in the macro-language generally require constant expressions.
| Format type | Prefix | Accepted characters |
|---|---|---|
| Hexadecimal | $ |<PHONE_NUMBER>ABCDEF |
| Decimal | none |<PHONE_NUMBER> |
| Octal | & | 01234567 |
| Binary | % | 01 |
| Fixed point (16.16) | none | 01234.56789 |
| Character constant | none | "ABYZ" |
| Gameboy graphics | ` | 0123 |
The "character constant" form yields the value the character maps to in the current charmap. For example, by default (refer to ascii(7)) ‘"A"’ yields 65. See Character maps for information on charmaps.
The last one, Gameboy graphics, is quite interesting and useful. After the backtick, 8 digits between 0 and 3 are expected, corresponding to pixel values. The resulting value is the two bytes of tile data that would produce that row of pixels. For example, ‘`01012323’ is equivalent to ‘$0F55’.
You can also use symbols, which are implicitly replaced with their value.
| Operator | Meaning |
|---|---|
(
) |
Precedence override |
FUNC() |
Built-in function call |
~ +
- |
Unary complement/plus/minus |
* /
% |
Multiply/divide/modulo |
<<
>> |
Shift left/right |
&
| ^ |
Binary and/or/xor |
+
- |
Add/subtract |
!=
== <= >= < > |
Comparison |
&&
|| |
Boolean and/or |
! |
Unary not |
~
complements a value by inverting all its
bits.
%
is used to get the remainder of the
corresponding division. ‘5 % 2’ is 1.
Shifting works by shifting all bits in the left operand either left (‘<<’) or right (‘>>’) by the right operand's amount. When shifting left, all newly-inserted bits are reset; when shifting right, they are copies of the original most significant bit instead. This makes ‘a << b’ and ‘a >> b’ equivalent to multiplying and dividing by 2 to the power of b, respectively.
Comparison operators return 0 if the comparison is false, and 1 otherwise.
Unlike in a lot of languages, and for technical reasons,
rgbasm
still evaluates both operands of
‘&&’ and ‘||’.
! returns 1 if the operand was 0, and 0 otherwise.
The following functions are designed to operate with fixed-point numbers:
| Name | Operation |
|---|---|
DIV (x,
y) |
|
MUL (x,
y) |
|
SIN (x) |
|
COS (x) |
|
TAN (x) |
|
ASIN (x) |
|
ACOS (x) |
|
ATAN (x) |
|
ATAN2 (x,
y) |
Angle between and |
These functions are useful for automatic generation of various tables. Example: assuming a circle has 65536.0 degrees, and sine values are in range [-1.0 ; 1.0]:
; -- ; -- Generate a 256-byte sine table with values between 0 and 128 ; -- ANGLE = 0.0 REPT 256 db MUL(64.0, SIN(ANGLE) + 1.0) >> 16 ANGLE = ANGLE + 256.0 ; 256 = 65536 / table_len, with table_len = 256 ENDR
"for instance"
’). The
backslash character ‘\
’ is special in
that it causes the character following it to be “escaped”,
meaning that it is treated differently from normal. There are a number of
escape sequences you can use within a string:
| String | Meaning |
|---|---|
‘\\ ’ |
Produces a backslash |
‘\" ’ |
Produces a double quote without terminating |
‘\, ’ |
Comma |
‘\{ ’ |
Curly bracket left |
‘\} ’ |
Curly bracket right |
‘\n ’ |
Newline ($0A) |
‘\r ’ |
Carriage return ($0D) |
‘\t ’ |
Tab ($09) |
| “\1” – “\9” | Macro argument (Only the body of a macro, see Invoking macros) |
‘\@ ’ |
Label name suffix (Only in the body of macros and REPTs) |
A funky feature is
‘{symbol}
’ within a string, called
“symbol interpolation”. This will paste
symbol's contents as a string. If it's a string
symbol, the string is simply inserted. If it's a numeric symbol, its value
is converted to hexadecimal notation with a dollar sign ‘$’
prepended.
TOPIC equs "life, the universe, and everything" ANSWER = 42 ; Prints "The answer to life, the universe, and everything is $2A" PRINTT "The answer to {TOPIC} is {ANSWER}\n"
Symbol interpolations can be nested, too!
It's possible to change the way numeric symbols are converted by
specifying a print type like so:
‘{d:symbol}
’. Valid print types
are:
| Print type | Format | Example |
|---|---|---|
‘d ’ |
Decimal | 42 |
‘x ’ |
Lowercase hexadecimal | 2a |
‘X ’ |
Uppercase hexadecimal | 2A |
‘b ’ |
Binary | 101010 |
Note that print types should only be used with numeric values, not strings.
HINT: The {symbol}
construct can also be
used outside strings. The symbol's value is again inserted directly.
The following functions operate on string expressions. Most of them return a string, however some of these functions actually return an integer and can be used as part of an integer expression!
| Name | Operation |
|---|---|
STRLEN (string) |
Returns the number of characters in string. |
STRCAT (str1,
str2) |
Appends str2 to str1. |
STRCMP (str1,
str2) |
Returns negative if str1 is alphabetically lower than str2 , zero if they match, positive if str1 is greater than str2. |
STRIN (str1,
str2) |
Returns the position of str2 in str1 or zero if it's not present (first character is position 1). |
STRSUB (str,
pos, len) |
Returns a substring from str starting at pos (first character is position 1) and len characters long. |
STRUPR (str) |
Converts all characters in str to capitals and returns the new string. |
STRLWR (str) |
Converts all characters in str to lower case and returns the new string. |
Character maps allow mapping strings up to 16 characters long to an abitrary 8-bit value:
CHARMAP "<LF>", 10 CHARMAP "í", 20 CHARMAP "A", 128
It is possible to create multiple character maps and then switch between them as desired. This can be used to encode debug information in ASCII and use a different encoding for other purposes, for example. Initially, there is one character map called ‘main’ and it is automatically selected as the current character map from the beginning. There is also a character map stack that can be used to save and restore which character map is currently active.
| Command | Meaning |
|---|---|
NEWCHARMAP
name |
Creates a new, empty character map called name. |
NEWCHARMAP
name, basename |
Creates a new character map called name, copied from character map basename. |
SETCHARMAP
name |
Switch to character map name. |
PUSHC |
Push the current character map onto the stack. |
POPC |
Pop a character map off the stack and switch to it. |
Note: Character maps affect all strings in the file from the point in which they are defined, until switching to a different character map. This means that any string that the code may want to print as debug information will also be affected by it.
Note: The output value of a mapping can be 0. If this happens, the assembler will treat this as the end of the string and the rest of it will be trimmed.
| Name | Operation |
|---|---|
BANK (arg) |
Returns a bank number. If arg is the symbol
@ , this function returns the bank of the current
section. If arg is a string, it returns the bank of
the section that has that name. If arg is a label,
it returns the bank number the label is in. The result may be constant if
rgbasm is able to compute it. |
DEF (label) |
Returns TRUE (1) if label has been defined, FALSE (0) otherwise. String symbols are not expanded within the parentheses. |
HIGH (arg) |
Returns the top 8 bits of the operand if arg is a label or constant, or the top 8-bit register if it is a 16-bit register. |
LOW (arg) |
Returns the bottom 8 bits of the operand if arg
is a label or constant, or the bottom 8-bit register if
it is a 16-bit register (AF
isn't a valid register for this function). |
ISCONST (arg) |
Returns 1 if arg's value is known by RGBASM (e.g.
if it can be an argument to IF ), or 0 if only
RGBLINK can compute its value. |
SECTION name,
type
SECTION name,
type, options
SECTION name,
type[addr]
SECTION name,
type[addr],
options
name is a string enclosed in double quotes, and can be a new name or the name of an existing section. If the type doesn't match, an error occurs. All other sections must have a unique name, even in different source files, or the linker will treat it as an error.
Possible section types are as follows:
ROM0
ROMX
ROM0
if tiny ROM mode is enabled in the
linker.VRAM
SRAM
WRAM0
WRAMX
WRAM0
if WRAM0 mode is enabled in the linker.OAM
HRAM
Note: While rgbasm
will automatically optimize ld
instructions to
the smaller and faster ldh
(see
gbz80(7)) whenever possible, it is generally unable to
do so when a label is involved. Using the ldh
instruction directly is recommended. This forces the assembler to emit a
ldh
instruction and the linker to check if the
value is in the correct range.
Since RGBDS produces ROMs, code and data can only be placed in
ROM0
and ROMX
sections. To
put some in RAM, have it stored in ROM, and copy it to RAM.
options are comma-separated and may include:
BANK
[bank]ALIGN
[align,
offset]ALIGN
[align] is a
shorthand for ALIGN
[align,
0]). This option can be used with
[addr], as long as they don't contradict eachother.
It's also possible to request alignment in the middle of a section, see
Requesting alignment
below.If [addr] is not specified, the section is
considered “floating”; the linker will automatically calculate
an appropriate address for the section. Similarly, if
BANK
[bank] is not specified,
the linker will automatically find a bank with enough space.
Sections can also be placed by using a linker script file. The format is described in rgblink(5). They allow the user to place floating sections in the desired bank in the order specified in the script. This is useful if the sections can't be placed at an address manually because the size may change, but they have to be together.
Section examples:
SECTION "Cool Stuff",ROMX
SECTION "Cool Stuff",ROMX[$4567]
SECTION "Cool Stuff",ROMX[$4567],BANK[3]
SECTION "Cool Stuff",ROMX,BANK[7]
SECTION "OAM Data",WRAM0,ALIGN[8] ; align to 256 bytes SECTION "VRAM Data",ROMX,BANK[2],ALIGN[4] ; align to 16 bytes
POPS
and PUSHS
provide the
interface to the section stack. The number of entries in the stack is limited
only by the amount of memory in your machine.
PUSHS
will push the current section
context on the section stack. POPS
can then later be
used to restore it. Useful for defining sections in included files when you
don't want to override the section context at the point the file was
included.
This means the code (or data) will not be stored in the place it
gets executed. Luckily, LOAD
blocks are the perfect
solution to that. Here's an example of how to use them:
SECTION "LOAD example", ROMX CopyCode: ld de, RAMCode ld hl, RAMLocation ld c, RAMLocation.end - RAMLocation .loop ld a, [de] inc de ld [hli], a dec c jr nz, .loop ret RAMCode: LOAD "RAM code", WRAM0 RAMLocation: ld hl, .string ld de, $9864 .copy ld a, [hli] ld [de], a inc de and a jr nz, .copy ret .string db "Hello World!", 0 .end ENDL
A LOAD
block feels similar to a
SECTION
declaration because it creates a new one.
All data and code generated within such a block is placed in the current
section like usual, but all labels are created as if they were placed in
this newly-created section.
In the example above, all of the code and data will end up in the "LOAD example" section. You will notice the ‘RAMCode’ and ‘RAMLocation’ labels. The former is situated in ROM, where the code is stored, the latter in RAM, where the code will be loaded.
You cannot nest LOAD
blocks, nor can you
change the current section within them.
UNION
keyword only works within
a single file, which prevents e.g. defining temporary variables on a single
memory area across several files. Unionized sections solve this problem. To
declare an unionized section, add a UNION
keyword
after the SECTION
one; the declaration is otherwise
not different. Unionized sections follow some different rules from normal
sections:
rgbasm
invocation, and across
several invocations. Different declarations are treated and merged
identically whether within the same invocation, or different ones.-w
flag is used,
WRAM0
and WRAMX
types are
still considered different.ROM0
or
ROMX
.Different declarations of the same unionized section are not appended, but instead overlaid on top of eachother, just like Unions. Similarly, the size of an unionized section is the largest of all its declarations.
-w
flag is used,
WRAM0
and WRAMX
types are
still considered different.When RGBASM merges two fragments, the one encountered later is appended to the one encountered earlier.
When RGBLINK merges two fragments, the one whose file was
specified last is appended to the one whose file was specified first. For
example, assuming ‘bar.o
’,
‘baz.o
’, and
‘foo.o
’ all contain a fragment with
the same name, the command
rgblink -o rom.gb baz.o foo.o
bar.o
baz.o
’
first, followed by the one from ‘foo.o
’,
and the one from ‘bar.o
’ last.
rgbasm
code that can be invoked
later.Symbol names can contain letters, numbers, underscores, hashes and
‘@’. However, they must begin with either a letter, a number,
or an underscore. Periods are allowed exclusively for labels, as described
below. A symbol cannot have the same name as a reserved keyword.
In the line where a symbol is defined there mustn't be any
whitespace before it, otherwise rgbasm
will
treat it as a macro invocation.
This can be done in a number of ways:
GlobalLabel ; This syntax is deprecated, AnotherGlobal: ; please use this instead .locallabel .yet_a_local: AnotherGlobal.with_another_local: ThisWillBeExported:: ; Note the two colons ThisWillBeExported.too::
Declaring a label (global or local) with
‘::
’ does an
EXPORT
at the same time. (See
Exporting and
importing symbols below).
Any label whose name does not contain a period is a global
label, others are locals. Declaring a global label sets it as the
current label scope until the next one; any local label whose first
character is a period will have the global label's name implicitly
prepended. Local labels can be declared as
‘scope.local:
’ or simply as as
‘.local:
’. If the former notation
is used, then ‘scope
’ must be the
actual current scope.
Local labels may have whitespace before their declaration as the only exception to the rule.
A label's location (and thus value) is usually not determined until the linking stage, so labels usually cannot be used as constants. However, if the section in which the label is declared has a fixed base address, its value is known at assembly time.
rgbasm
is able to compute the
subtraction of two labels either if both are constant as described
above, or if both belong to the same section.
EQU
EQU
allows defining constant symbols. Unlike SET
below, constants defined this way cannot be redefined. They can, for
example, be used for things such as bit definitions of hardware registers.
SCREEN_WIDTH equ 160 ; In pixels SCREEN_HEIGHT equ 144
Note that colons ‘:
’
following the name are not allowed.
SET
SET
,
or its synonym =
, defines constant symbols like
EQU
, but those constants can be re-defined. This
is useful for variables in macros, for counters, etc.
ARRAY_SIZE EQU 4 COUNT SET 2 COUNT SET ARRAY_SIZE+COUNT ; COUNT now has the value 6 COUNT = COUNT + 1
Note that colons ‘:
’
following the name are not allowed.
RSSET
,
RSRESET
, RB
,
RW
RSRESET str_pStuff RW 1 str_tData RB 256 str_bCount RB 1 str_SIZEOF RB 0
The example defines four constants as if by:
str_pStuff EQU 0 str_tData EQU 2 str_bCount EQU 258 str_SIZEOF EQU 259
There are five commands in the RS group of commands:
| Command | Meaning |
|---|---|
RSRESET |
Equivalent to ‘RSSET 0 ’. |
RSSET
constexpr |
Sets the _RS counter
to constexpr. |
RB
constexpr |
Sets the preceding symbol to _RS
and adds constexpr
to _RS . |
RW
constexpr |
Sets the preceding symbol to _RS
and adds constexpr
* 2 to _RS . |
RL
constexpr |
Sets the preceding symbol to _RS
and adds constexpr
* 4 to _RS . (In
practice, this one cannot be used due to a bug). |
Note that colons ‘:
’
following the name are not allowed.
EQUS
EQUS
is used to define string symbols. Wherever the assembler meets a string
symbol its name is replaced with its value. If you are familiar with C you
can think of it as similar to #define .
COUNTREG EQUS "[hl+]" ld a,COUNTREG PLAYER_NAME EQUS "\"John\"" db PLAYER_NAME
This will be interpreted as:
ld a,[hl+] db "John"
String symbols can also be used to define small one-line macros:
pusha EQUS "push af\npush bc\npush de\npush hl\n"
Note that colons ‘:
’
following the name are not allowed. String equates can't be exported or
imported.
Important note: An
EQUS
can be expanded to a string that contains
another EQUS
and it will be expanded as well. If
this creates an infinite loop, rgbasm
will error
out once a certain depth is reached. See the -r
command-line option in rgbasm(1). Also, a macro can
contain an EQUS
which calls the same macro,
which causes the same problem.
MACRO
IF
constructs.
MyMacro: MACRO ld a,80 call MyFunc ENDM
Note that a single colon
‘:
’ following the macro's name is
required. Macros can't be exported or imported.
Exporting of symbols has to be done manually, importing is done
automatically if rgbasm
finds a symbol it does not
know about.
The following will cause symbol1, symbol2 and so on to be accessible to other files during the link process:
EXPORT
symbol1 [, symbol2,
...]
GLOBAL
is a deprecated synonym for
EXPORT
, do not use it.
Note also that only exported symbols will appear in symbol and map files produced by rgblink(1).
PURGE
allows you to completely remove a symbol from the
symbol table as if it had never existed. USE WITH EXTREME
CAUTION!!! I can't stress this enough, you seriously need to
know what you are doing. DON'T purge a symbol that you use in expressions
the linker needs to calculate. When not sure, it's probably not safe to purge
anything other than string symbols, macros, and constants.
Kamikaze EQUS "I don't want to live anymore" AOLer EQUS "Me too" PURGE Kamikaze, AOLer
Note that, as an exception, string symbols in the argument list of
a PURGE
command will not be
expanded.
| Type | Name | Contents |
|---|---|---|
EQU |
@ |
PC value |
EQU |
_PI |
Fixed point π |
SET |
_RS |
_RS Counter |
EQU |
_NARG |
Number of arguments passed to macro |
EQU |
__LINE__ |
The current line number |
EQUS |
__FILE__ |
The current filename |
EQUS |
__DATE__ |
Today's date |
EQUS |
__TIME__ |
The current time |
EQUS |
__ISO_8601_LOCAL__ |
ISO 8601 timestamp (local) |
EQUS |
__ISO_8601_UTC__ |
ISO 8601 timestamp (UTC) |
EQU |
__UTC_YEAR__ |
Today's year |
EQU |
__UTC_MONTH__ |
Today's month number, 1–12 |
EQU |
__UTC_DAY__ |
Today's day of the month, 1–31 |
EQU |
__UTC_HOUR__ |
Current hour, 0–23 |
EQU |
__UTC_MINUTE__ |
Current minute, 0–59 |
EQU |
__UTC_SECOND__ |
Current second, 0–59 |
EQU |
__RGBDS_MAJOR__ |
Major version number of RGBDS |
EQU |
__RGBDS_MINOR__ |
Minor version number of RGBDS |
EQU |
__RGBDS_PATCH__ |
Patch version number of RGBDS |
DS
allocates a number of empty bytes. This is the
preferred method of allocating space in a RAM section. You can also use
DB
, DW
and
DL
without any arguments instead (see
Defining constant data
below).
DS 42 ; Allocates 42 bytes
Empty space in RAM sections will not be initialized. In ROM
sections, it will be filled with the value passed to the
-p
command-line option, except when using overlays
with -O
.
DB
defines a list of bytes that will be stored in the
final image. Ideal for tables and text. Note that strings are not
zero-terminated!
DB 1,2,3,4,"This is a string"
DS
can also be used to fill a region of
memory with some value. The following produces 42 times the byte $FF:
DS 42, $FF
Alternatively, you can use DW
to store a
list of words (16-bit) or DL
to store a list of
double-words/longs (32-bit). Strings are not allowed as arguments to
DW
and DL
.
You can also use DB
,
DW
and DL
without arguments,
or leaving empty elements at any point in the list. This works exactly like
DS 1
, DS 2
and
DS 4
respectively. Consequently, no-argument
DB
, DW
and
DL
can be used in a WRAM0
/
WRAMX
/ HRAM
/
VRAM
/ SRAM
section.
INCBIN
to include a raw binary file as it is. If the
file isn't found in the current directory, the include-path list passed to
rgbasm(1) (see the -i
option) on the
command line will be searched.
INCBIN "titlepic.bin" INCBIN "sprites/hero.bin"
You can also include only part of a file with
INCBIN
. The example below includes 256 bytes from
data.bin, starting from byte 78.
INCBIN "data.bin",78,256
A union starts with a UNION
keyword, and
ends at the corresponding ENDU
keyword.
NEXTU
separates each block of allocations, and you
may use it as many times within a union as necessary.
; Let's say PC = $C0DE here UNION ; Here, PC = $C0DE Name: ds 8 ; PC = $C0E6 Nickname: ds 8 ; PC = $C0EE NEXTU ; PC is back to $C0DE Health: dw ; PC = $C0E0 Something: ds 6 ; And so on Lives: db NEXTU VideoBuffer: ds 19 ENDU
In the example above, ‘Name, Health, VideoBuffer’
all have the same value, as do ‘Nickname’ and
‘Lives’. Thus, keep in mind that ld [Health],
a
is identical to ld [Name], a
.
The size of this union is 19 bytes, as this is the size of the largest block (the last one, containing ‘VideoBuffer’). Nesting unions is possible, with each inner union's size being considered as described above.
Unions may be used in any section, but inside them may only be
DS -
like commands (see
Declaring
variables in a RAM section).
add a,b ld sp,hl MyMacro ; This will be expanded sub a,87
It's valid to call a macro from a macro (yes, even the same one).
When rgbasm
sees
MyMacro
it will insert the macro definition (the
code enclosed in MACRO
/
ENDM
).
Suppose your macro contains a loop.
LoopyMacro: MACRO xor a,a .loop ld [hl+],a dec c jr nz,.loop ENDM
This is fine, but only if you use the macro no more than once per
scope. To get around this problem, there is the escape sequence
\@
that expands to a unique string.
\@
also works in
REPT
blocks.
LoopyMacro: MACRO xor a,a .loop\@ ld [hl+],a dec c jr nz,.loop\@ ENDM
Important note: Since a macro can call itself
(or a different macro that calls the first one), there can be circular
dependency problems. If this creates an infinite loop,
rgbasm
will error out once a certain depth is
reached. See the -r
command-line option in
rgbasm(1). Also, a macro can have inside an
EQUS which references the same macro, which has the same
problem.
It's possible to pass arguments to macros as well! You retrieve
the arguments by using the escape sequences \1
through \9
, \1
being the
first argument specified on the macro invocation.
LoopyMacro: MACRO ld hl,\1 ld c,\2 xor a,a .loop\@ ld [hl+],a dec c jr nz,.loop\@ ENDM
Now I can call the macro specifying two arguments, the first being the address and the second being a byte count. The generated code will then reset all bytes in this range.
LoopyMacro MyVars,54
Arguments are passed as string equates, although there's no need
to enclose them in quotes. Thus, an expression will not be evaluated first
but kind of copy-pasted. This means that it's probably a very good idea to
use brackets around \1
to \9
if you perform further calculations on them. For instance, consider the
following:
print_double: MACRO PRINTV \1 * 2 ENDM print_double 1 + 2
The PRINTV
statement will expand to
‘PRINTV 1 + 2 * 2
’, which will print 5
and not 6 as you might have expected.
Line continuations work as usual inside macros or lists of macro arguments. However, some characters need to be escaped, as in the following example:
PrintMacro: MACRO PRINTT \1 ENDM PrintMacro STRCAT("Hello "\, \ "world\\n")
The comma needs to be escaped to avoid it being treated as
separating the macro's arguments. The backslash ‘\’ (from
‘\n’) also needs to be escaped because of the way
rgbasm
processes macro arguments.
In reality, up to 256 arguments can be passed to a macro, but you
can only use the first 9 like this. If you want to use the rest, you need to
use the SHIFT
command.
SHIFT
is a special command only available
in macros. Very useful in REPT
blocks. It will shift
the arguments by one to the left. \1
will get the
value of \2
, \2
will get the
value of \3
, and so forth.
This is the only way of accessing the value of arguments from 10 to 256.
SHIFT
can optionally be given an integer
parameter, and will apply the above shifting that number of times.
PRINTT "I'm the greatest programmer in the whole wide world\n" PRINTI (2 + 3) / 5 PRINTV $FF00 + $F0 PRINTF MUL(3.14, 3987.0)
PRINTT
PRINTV
PRINTI
PRINTF
Be careful that none of those automatically print a line feed; if
you need one, use PRINTT \n
.
REPT
is here for that purpose.  The following example will assemble
‘add a,c
’ four times:
REPT 4 add a,c ENDR
You can also use REPT
to generate tables
on the fly:
; -- ; -- Generate a 256 byte sine table with values between 0 and 128 ; -- ANGLE = 0.0 REPT 256 db (MUL(64.0, SIN(ANGLE)) + 64.0) >> 16 ANGLE = ANGLE+256.0 ENDR
As in macros, you can also use the escape sequence
\@
. REPT
blocks can be
nested.
FAIL
and WARN
can be used to
print errors and warnings respectively during the assembly process. This is
especially useful for macros that get an invalid argument.
FAIL
and WARN
take a string as
the only argument and they will print this string out as a normal error with a
line number.
FAIL
stops assembling immediately while
WARN
shows the message but continues afterwards.
If you need to ensure some assumption is correct when compiling,
you can use ASSERT
and
STATIC_ASSERT
. Syntax examples are given below:
Function: xor a ASSERT LOW(Variable) == 0 ld h, HIGH(Variable) ld l, a ld a, [hli] ; You can also indent this! ASSERT BANK(OtherFunction) == BANK(Function) call OtherFunction ; Lowercase also works assert Variable + 1 == OtherVariable ld c, [hl] ret .end ; If you specify one, a message will be printed STATIC_ASSERT .end - Function < 256, "Function is too large!"
First, the difference between ASSERT
and
STATIC_ASSERT
is that the former is evaluated by
RGBASM if it can, otherwise by RGBLINK; but the latter is only ever
evaluated by RGBASM. If RGBASM cannot compute the value of the argument to
STATIC_ASSERT
, it will produce an error.
Second, as shown above, a string can be optionally added at the end, to give insight into what the assertion is checking.
Finally, you can add one of WARN
,
FAIL
or FATAL
as the first
optional argument to either ASSERT
or
STATIC_ASSERT
. If the assertion fails,
WARN
will cause a simple warning (controlled by
rgbasm(1) flag -Wassert
) to be
emitted; FAIL
(the default) will cause a non-fatal
error; and FATAL
immediately aborts.
INCLUDE
to process another assembler file and then
return to the current file when done. If the file isn't found in the current
directory the include path list (see the -i
option in
rgbasm(1)) will be searched. You may nest
INCLUDE
calls infinitely (or until you run out of
memory, whichever comes first).
INCLUDE "irq.inc"
IF
, ELIF
,
ELSE
, and ENDC
let you have
rgbasm
skip over parts of your code depending on a
condition. This is a powerful feature commonly used in macros.
IF NUM < 0 PRINTT "NUM < 0\n" ELIF NUM == 0 PRINTT "NUM == 0\n" ELSE PRINTT "NUM > 0\n" ENDC
The ELIF
(standing for "else
if") and ELSE
blocks are optional.
IF
/ ELIF
/
ELSE
/ ENDC
blocks can be
nested.
Note that if an ELSE
block is found before
an ELIF
block, the ELIF
block will be ignored. All ELIF
blocks must go
before the ELSE
block. Also, if there is more than
one ELSE
block, all of them but the first one are
ignored.
OPT
can be used to change some of the options during
assembling from within the source, instead of defining them on the
command-line.
OPT
takes a comma-separated list of
options as its argument:
PUSHO OPT g.oOX ;Set the GB graphics constants to use these characters DW `..ooOOXX POPO DW `00112233
The options that OPT can modify are currently:
b
, g
and
p
.
POPO
and PUSHO
provide the interface to the option stack. PUSHO
will push the current set of options on the option stack.
POPO
can then later be used to restore them. Useful
if you want to change some options in an include file and you don't want to
destroy the options set by the program that included your file. The stack's
number of entries is limited only by the amount of memory in your
machine.
ALIGN
as presented in
SECTIONS is often useful as-is, sometimes
you instead want a particular piece of data (or code) in the middle of the
section to be aligned. This is made easier through the use of mid-section
align
align,
offset. It will alter the section's attributes to ensure
that the location the align
directive is at, has its
align lower bits equal to offset.
If the constraint cannot be met (for example because the section
is fixed at an incompatible address), and error is produced. Note that
align
align is a shorthand for
align
align,
0.
rgbasm
was originally written by Carsten Sørensen
as part of the ASMotor package, and was later packaged in RGBDS by Justin
Lloyd. It is now maintained by a number of contributors at
https://github.com/rednex/rgbds.
| December 5, 2019 | General |


2 Chronicles 14:10
Then Asa went out against him, and they set the battle in array in the valley of Zephathah at Mareshah.


You're Welcomeİ to the stripped down graphically not-so intensive version of
(sunz-uv-ale-ee-en-tek-nowl-oh-gee)s'
Enter-Active Welcomeİ".
You should be here if you have ISDN access and little or no patience.
Since there is no way to convey the importance of the part that image plays conceptually in the graphically intensive 8 bit Full Color version or the 8 bit Anaglyphic 3D version, we will cut to the chase; productwise, at least.


Open source video game library manager and launcher with support for 3rd party libraries like Steam, GOG, Origin and Uplay. Including game emulation support, providing one unified interface for your games.
Features:
Steam, Origin, GOG, Battle.net, Uplay support
Import games from Steam, Origin, GOG, Battle.net and Uplay services including games that are not installed. You can also import Windows Store (UWP) games.
Console Emulation support
Import console games and run them through emulators.
View options
Choose from 3 different view options.
Custom games
Add any game or program with custom launch options.
Automatic Update
Application automatically updates to new version.
Portable installation
Run Playnite without need to install, with ability to run from any place, with option to configure database location for automatic sync via service like DropBox or Google Drive.
Upcoming features:
"Big Picture" mode with controller support
Fullscreen mode managed with controller.
UI Customization
Full support for skins and custom color pallets.
Add additional launch options for legacy games
To help managing and launching older games. Features like limit CPU cores, CPU speed fix, compatibility flags, automatic installation of 3d party wrappers etc.
Plugin support
Add additional functionality through easy scritping or fully fledged C# plugins.


{% extends 'base.html'%} {% import 'bootstrap/wtf.html' as wtf %} {% block styles %} {{ super() }} {% endblock %} {% block content %}
{{ comment.comment }}
{{comment.user.username}}
No Comments for this yet for this post. Be the first to comment


--- title: Deng Xiaoping in the U.S., 1979 date: 2015-05-23 06:39:45 Z layout: post type: post status: publish meta: pe_theme_meta: O:8:"stdClass":2:{s:7:"gallery";O:8:"stdClass":3:{s:2:"id";s:2:"89";s:5:"width";s:0:"";s:6:"height";s:0:"";}s:5:"video";O:8:"stdClass":1:{s:2:"id";s:3:"504";}} _edit_last: '1' author: Nathaniel ---
Deng Xiaoping speaks in D.C., the year relations between the People's Republic of China and the U.S. normalized.
[Citation: via the Asia Society blog]


(click here to close)
Find a Pair
You see a board with geometric figures. You have to find two identical figures. Click on both to win a round. Do your best in 55 seconds. Watch the red line.


12 missing from South Korean fishing boat burned by fire
Jeju coast guard official Lee Geun-han said on Tuesday the coast guard and navy were deploying vessels, helicopters and a patrol plane to search the area for survivors.
by APSouth Korea coast guard says 12 people are missing from a fishing boat that caught fire in waters near the southern island of Jeju.
Jeju coast guard official Lee Geun-han said on Tuesday the coast guard and navy were deploying vessels, helicopters and a patrol plane to search the area for survivors.
Mr. Lee says the coast guard received a report about the fire at around 7 a.m. A court guard helicopter found it about an hour later, and the upper side of the boat had been burned completely.


You can use the commands listed
http://technet.microsoft.com/en-us/library/cc725766%28WS.10%29.aspx
here to manage Terminal Server connections. query session /server: is probably the first one you want. These all require remote procedure call, which is part and parcel with CIFS/SMB (the IPC$ share). Check that the RPC service is enabled first. Second, you can’t/shouldn’t (depending on network configuration) run these services over anything but the local network. If you’re trying to do this sort of management over the Internet, you should be using a VPN or some creative SSH tunneling.


Classes | |
| interface | IITWindow |
| Represents an iTunes window. More... | |
| interface | IITBrowserWindow |
| Represents the main browser window. More... | |
| interface | IITPlaylistWindow |
| Represents a playlist window. More... | |
| interface | IITWindowCollection |
| Represents a collection of window objects. More... | |
Enumerations | |
| enum | ITWindowKind { ITWindowKindUnknown = 0, ITWindowKindBrowser, ITWindowKindPlaylist, ITWindowKindEQ, ITWindowKindArtwork, ITWindowKindNowPlaying } |
| Specifies the window kind. More... |
|
|
Specifies the window kind.
|