MAIN Port Copyright © 1993-1994 Henrik Tikanvaara All rights reserved Index ~~~~~ Copyright Copyright, distribution terms and contact address. Introduction Introduction to Port. Instructions General instructions. Usage Commandline usage and options. Preferences Port preferences file. Misc stuff Other notes. History History of changes. Finally Some final words. Other prods Information about other things I've coded. copyright This program is freeware, you may copy it on as long as there is no charge for the program (except for small handling fees if this program is distributed on a disk), and all of the files accompanying Port and Port itself are unaltered and remain intact. If you desire to put Port on a CD-ROM or in some other kind of PD-Shareware library, please contact me. The author accepts no responsibility whatsoever regarding Port, or anything else for that matter. All donations will be gladly accepted, though checks and foreign currencies all have the problem with the banks charging monstrous fees to convert the money to Finnish marks. So don't send 'em, you'll be wasting your money. Finnish marks and US dollars are most welcome, as are also letters, chocolate, beer, disks, hardware etc. Sending something along a suggestion will have a very positive effect on its chances being done. =) Contact addresses: Mail: Henrik Tikanvaara Tikasrinne 3A 02200 Espoo Finland Internet: In order of preference, only use the latter ones if you get no reply in 2 weeks. I check my email once a week. shadowlord@brahman.nullnet.fi sl@field.ichaos.nullnet.fi henrik.tikanvaara@mpoli.fi intro Have you ever got a textfile which had fine ASCII characters, but the accented characters were all wrong, and the file had a ^M after each line? You had probably found a textfile written on PC. Port translates the PC characters to their Amiga equivalents, or at least tries to make a very close match. It also knows how to translate a SF7 format textfile. More than this though, you can perform many other useful functions to textfiles, I really advise you take the time to get familiar with the different functions. Port can be viewed as a utility similar to a GFX converter, with the difference that it works on textfiles. instructions Port can only be run from the Shell, other than that, it should be very easy to use. Everything in the commandline is case-sensitive. The commandline is organized much like in LhA. First the options which are always prefaced by a dash, then the mode, and lastly the input and output filenames. The output filename is optional. Check Usage for a fast index of all different options. usage Port V2.00 Copyright © 1994 Henrik Tikanvaara Usage: Port [Options] [Dest] Mode Options s SF7->Amiga -a ANSI strip p PC ->Amiga -b No conversion buffer c Combined -e# Make EOLs S Amiga->SF7 -i# InterNet strip (1-Note/2-Blank) P Amiga->PC -l LhA pack output file l Lowercase -n No endspace removal u Uppercase -p PowerPack output file o Only ASCII -s# Spaces to tabs (Def 8) n Null -t# Tabs to spaces (Def 8) -? Credits Source The source filename to be converted. Dest The optional filename for the converted text. combined "c" Combined Decodes PC and SF7 characters to Amiga format. Useful for textfiles which have used the SF7 character set with the PC graphics characters etc. prefs Port has a preferences file, where you can specify options that you want to be active or inactive on every conversion. If you want to override the preferences options, it can be done by setting the option in the commandline, with an exclamation mark following it. For example, if you have spaces to tabs conversion on (-s), and you want to turn it off, write "-s!". After you have modified the options file to your preference, you must copy it to "ENV:" and "ENVARC:". If you are about to have conflicting options, you must first turn off the option you don't want, and then specify the other option. For example, you have specified SpacesToTabs conversion in the preferences, but now you want to use TabsToSpaces option. These options normally cause a conflict. In the commandline, first you have to write "-s!" (Suppress SpacesToTabs) and only after that you can specify "-t" (TabsToSpaces). The following options can be specified in the preferences file: ANSIStrip ConversionBuffer EndSpaceRemoval InterNetStrip LhAPack MakeEOLs PowerPackOutput SpacesToTabs TabsToSpaces TempDir TickDelay ansistrip Strips all ANSI codes from the file. Both $1B,"[" and $9B are understood as the CSI or Control Sequence Introducer. instrip Strips InterNet message headers from the textfile. If "1" is specified as the option, a text telling that a header was removed is inserted to each place where this was done. For "2", no text is inserted, the header is simply cut off. This is done in the following way: The input lines are scanned for starting with "From " or "Path: ". If the found text is "Path: ", then all the following lines are cut off, until an empty line is encountered. If the text is "From ", the line is also scanned for numbers and colons, which should be present if the line has a time stamp. If those conditions were fulfilled, the data is skipped until hitting an empty line. For the "From " part, this method should work pretty well, but the cut might accidentally be triggered if a normal line starts with "Path: ". Use with care. lhaoutput The output textfile is automatically packed with LhA. For this to work you have to have LhA in your path. ppoutput The output textfile is automatically packed using "powerpacker.library", with best compression and largest buffer size. tempdir Specifies where the temporary output textfile is written when a packing option is selected. You should use a directory in RAM: but if you run out of memory, you can set it somewhere else. tickdelay Specifies the delay between each progress report. Actually, it specifies the number of Vertical Blanks to wait before printing a new progress report. For normal PAL monitors, there are 50 VBlanks in a second, so setting this to 25 will result in 2 progress reports per second, 10 in 5 and so on. NTSC monitors have 60 per second, and multisync have something like 70, I think. On my Amiga 1200 with fast RAM, I noticed that it doesn't affect the conversion speed by much on values at and over 15 VBlanks (with a monitor of 50 VBlanks per sec). A value between 15-50 is usually good for PAL systems. Setting the option off specifies 1 progress report per second. opt_noconvbuf "-b" No conversion buffer By default, Port reads the whole source file in memory and then converts and writes at the same time. But in case you're short of memory, this option makes Port read and write at the same time. This mode uses memory based on how much you have left, but with the lower limit of 100kB. Especially to floppy users with very little memory: use two different devices with this, if you don't want the conversion to be unreasonably slow. Some options don't work while this option is active. makeeols "-e#" Make EOLs Turns a string of at least # spaces into a linefeed. This option is useful if you saved a writer-routine's data from a demo or an intro in a textfile. Usually the text has no linefeeds, only some 10 spaces or so between each of the "lines". This way you can make the file much more readable. # can be 1-99. endspace "-n" No endspace removal By default Port removes all spaces and tabs that precede the end of the line. These are usually invisible to the user, and are left by the writer of the textfile by accident. Removing them shouldn't cause any harm, but it will reduce the size of the file. In case you need the spaces or tabs in the ends of the lines, use this option. spacestotabs "-s#" Spaces to tabs Tells Port to convert any strings of spaces and tabs to tabs, using # as the tabsize, in case it reduces the size of the textfile. # can be from 1 to 16. Without size specification, 8 will be used. This option is very useful with charts and other textfiles with lots of spaces in them, because they get a lot smaller. It's a good idea to set this on as a default in your preferences file. tabstospaces "-t#" Tabs to spaces Convert any tabs to spaces. Tabsize used in the textfile is specified in #. # can be from 1 to 16. Without size specification, 8 will be used. mode Mode determines what Port expects the source file to be. Since almost all of the different character codes are used in different textfile formats, it's not easy to know what the format is just by looking what codes are there. So usually you should first take a look at the new textfile and determine what computer it has been written on. Attention! Be careful when choosing your mode, if you choose a wrong mode, you can do irreversible damage to the textfile. Simply using the other mode pair (for example, PC->Amiga & Amiga->PC) will not be able to turn the file back into what it was, since many characters in one character set have no equivalents in other character sets, and those are translated to _similar_ characters. In PC->Amiga mode a PC box character might be translated to a # sign, but when the # sign is converted back to PC, it stays as a # sign. When I made the PC->Amiga and Amiga->PC tables, I always first tried to find an equivalent character. If there was none, I then chose a close match. If there was a character with an accent, but the other format had no such character, I converted the accented character into its un-accented form. If there was an equal character, but in different case, then I translated into that without caring of the case. Since making the table is pretty repetitive work, I'm sure I made some mistakes. I happily change the translations, if you notice a mistake or have a better idea. pctoami "p" PC->Amiga Will strip all characters under $20 except TABs, LFs and ESCs and change all non-ASCII characters ($80-$FF) to the equivalents used on Amiga. Since Amiga's character set differs from the one used in PC, a close match is attempted when no equivalent exists. You should read the information about mode. sf7toami "s" SF7->Amiga Strips all characters under $20 except TABs, LFs and ESCs, and translates the SF7 scands ("[{\|]}") to normal Amiga scands. amitopc "P" Amiga->PC Adds CR's to the end of each line and translates non-ASCII characters to their equivalents on PC. You should read the general information about mode. amitosf7 "S" Amiga->SF7 Strips all characters under $20 except TABs, LFs and ESCs, and translates scands which have an SF7 equivalent to the special SF7 form ("[{\|]}"). lowercase "l" Lowercase Translates all characters to lowercase. IMPORTANT: This is done an Amiga file in mind. So if you try to translate a file of some other type, only the ASCII characters will be changed correctly, many non-ASCII characters will be mangled. uppercase "u" Uppercase Translates all characters to uppercase. IMPORTANT: This is done an Amiga file in mind. So if you try to translate a file of some other type, only the ASCII characters will be changed correctly, many non-ASCII characters will be mangled. onlyasc "o" Only ASCII Cuts all non-ASCII characters (ie. characters with a code higher than $7F), and a lot of characters under $20 from the file. null "n" Null This mode does no conversion, it only strips characters under $20 except TABs, LFs and ESCs. Use this when you want to do special operations, like tab conversion, on an any textfile. source "Source" This is the name of the textfile(s) which you wish to convert. If the file has been PowerPacked, it will be automatically decrunched. You can use wildcards, since Port uses dos.library/MatchNext() to find the files. If you use patterns, you can either specify no destination or the destination must be a directory. Port does not have an "ALL" option, which would convert all files recursively, but this can easily be accomplished by using a couple of a bit more complex patterns. For example, first "Port -s n #?", then "Port -s n #?/#?" and so on. Here's a piece of the documentation for MatchFirst(). The patterns are fairly extensive, and approximate some of the ability of Unix/grep "regular expression" patterns. Here are the available tokens: ? Matches a single character. # Matches the following expression 0 or more times. (ab|cd) Matches any one of the items seperated by '|'. ~ Negates the following expression. It matches all strings that do not match the expression (aka ~(foo) matches all strings that are not exactly "foo"). [abc] Character class: matches any of the characters in the class. [~bc] Character class: matches any of the characters not in the class. a-z Character range (only within character classes). % Matches 0 characters always (useful in "(foo|bar|%)"). * Synonym for "#?", not available by default in 2.0. Available as an option that can be turned on. "Expression" in the above table means either a single character (ex: "#?"), or an alternation (ex: "#(ab|cd|ef)"), or a character class (ex: "#[a-zA-Z]"). dest This is the optional filename or the destination directory for the converted text. This doesn't have to be specified, in that case the original will be overwritten by the converted text. BEWARE! If the new textfile comes out bigger than the original and you run out diskspace, or some other similar error occurs, you will LOSE the file. If you are using the "No conversion buffer" option, the file will not be overwritten. Instead, a new file with the original name and some suffix will be used as the destination instead. misc Aborting the conversion ~~~~~~~~~~~~~~~~~~~~~~~ The conversion can be aborted most of the time by pressing ^C. When using two different files for the source and destination, the conversion can always be aborted. But when converting on the original textfile, the conversion can only be aborted while Port is still reading. After it starts writing, you have to wait until it's finished. This is done to protect the textfile, otherwise everything would be lost. End of conversion ~~~~~~~~~~~~~~~~~ In the end of the conversion, Port shows some information of the converted file compared to the original. The first number tells the change of size in bytes, and the second one the size of the converted file as a percentage of the original. finalwords Port V2.00, based on Port V1.46, was mainly developed between 18-May-94 and 26-Jun-94 in about 90 hours of work. The source code size is currently approximately 4000 lines. Here are some personal hellos to my friends: Axolotl/Capacala Did you have cool time in England and Germany? It will be interesting to see if more people come to Aggressive Party this year (do they have money to set it up anyway?) but it was kind of cool with so few people and so much space. Did alcohol have an effect? Nahh... Breeze/Capacala I'm still quite unsure if I'll code an intro for Ass'94. Maybe, but just maybe. Ged Your new text adventure system is great, it will be very easy and a lot of fun to make adventures for it, when it's finished. Guru Gnosis Sahib Did you say Base? Just a moment, I gotta go to the bathroom, fast! Damn you, code the QWK reader soon, I won't use TIN anymore. Otu Always fun to have around. Hope to see some more cyberpunk stories from you soon! Passy/Capacala Your demo will be cool, but I'm afraid the quality of the PC compo will be TOUGH at Ass'94. I have always thought that coding is clearly an art form. There are so many different ways to do things, some are just plain usual, some are exceedingly witty, and some are damn wicked. Such a shame only another coder can fully appreciate the work at that level. Anyway, I thought about the reasons I coded Port, and why I'm putting it into distribution. It sometimes just felt too good to be given everyone for free. But then I noted that a lot of cool programs I use have been made by other people like me, and they are for free too. I haven't sent money for any of them, though I have often been pretty close to doing so. But then I realized that the proper way to pay back is to code more good stuff since I'm able to do that. I think this is what everyone should do. If you have done some useful code for your own need, why don't you distribute it! Here's a list of coders I think have done nice work: Stefan Boberg - LhA Christoph Feck - FJPEG Holger Kruse - ReOrg Jarno Paananen - S3M code Christophe Passuello - ShowGIF Remember to write if you have some cool suggestions for features you'd like Port to have, or if you happen to find a bug. In case of a bug, tell me exactly what to do to make the bug appear, and send the textfile (or a part of it) which causes the bug, if possible. Also describe it well, if it isn't obvious. And write in any case if you're able; I want to know how many people are using Port! I know it's a pain to write real letters, but everyone can drop a note through Internet. And if you don't have email access, get it! You can get in touch with a lot of people around the world, for free. Why don't people use their modems to their full potential? For my newest programs and Internet email access, call ______ ________/\________/\ /\ \ | /\___ ___/\ /\ /\__ ___ \ /\ /\/ \ \ | /\ \/ / / \ \ \ | | |\ ____/ /\ ____/ /\__/\ |\ |/ |\ _ _ /| /\__/\ |\__ \| | | \/ ___/\ \/ / \| \_/ | \/|\/|\/ |/ \| \ \__ | | / | \ /\ \ | | | | / /\ \ |\ \| |________/|___|\___/ / \ \__|__|___| |__/ / \ \__| \__ \ **[ggs]***********\ /****\ /***************\ /****\ /*******\/* _ \/ \/ \/ \/ -=*=- Sysop: Guru Gnosis Sahib -=*=- Co-Sysops: Shadow Lord & X-Dus -=*=- -=*=- AXsh v1.31 PL1 reg, 68030/25/7MB/320MB & USR 16800 DS -=*=- +358-0-498797 ~~~~~~~~~~~~~ // \X/ Thanks to Amiga for being the coolest computer ever!