TINAPAMA
1 |
Have you ever found yourself installing the same program over and over again, on your different Amigas? You can now automate this process, even remotely, with TINAPAMA! 
|
In a Nutshell
TINAPAMA (TINAPAMA is Not A PAckage MAnager) brings automated program installation to Classic Amigas. It supercedes AmiAutoUpdate, which had a different goal and was never completed. It differs from AmiUpdate on AmigaOS 4 and Easy2Install on MorphOS by providing a simple command line and decentralised program descriptions. TINAPAMA allows updating programs individually or in groups, physically or remotely .
Requirements
TINAPAMA has been tested on real Amigas and in WinUAE, with Kickstart v3.0, Kickstart v3.1, Workbench v3.1. It should work with Kickstart/Workbench 2.x and above.
You will also need a working TCP/IP stack, like Miami or Roadshow, AmiSSL library to access secured Web sites, and the XAD system to extract the files from the downloaded archives. Nothing else, as TINAPAMA is a Shell command.
TINAPAMA uses the assign TINAPAMA: to store temporary files. This assign should point to a drawer in RAM, like RAM:T or T:, or on a hard-disk partition, like Essais:Temp. It should not point directly at the root of a partition because some archive without drawer (option NODRAWER below) include Disk.info that would replace your nice icon!
Info: the XAD system and LHA v2.15 archives do not go well together, as noted elsewhere, spaces will be changed into underscore upon unarchiving! This change may or may not cause problem... Unfortunately, TINAPAMA cannot do anything about that! 
Availability
TINAPAMA is free and open source software. You can dowload below its latest version, which you can also find in Aminet (soon!). Its source code is available in the Europe-based CodeBerg .
I envision a time when all packages in Aminet would include version information in their READMEs, would "replace" older versions with newer ones (like AmiModRadio does) instead of creating new entries with version numbers in their names, and would include a TINAPAMA description file in their archives to ease updating! 
Usages
A typical use of TINAPAMA would be to execute the following command to update AmiModRadio to compare the local version of AmiModRadio with the one in Aminet and update it to the latest (if necessary).
1.C:> TINAPAMA Utilitaires:Musique/Divers/AmiModRadio/AmiModRadio.tinapama
and TINAPAMA would parse the description file AmiModRadio.tinapama, download, unarchive, and copy the new files into Utilitaires:Musique/Divers/AmiModRadio. The table below shows what happens when running TINAPAMA for a program with/out an update.
Usage in a Nutshell
1.C:> TINAPAMA Utilitaires:Musique/Divers/AmiModRadio/AmiModRadio.tinapama
|
If local version is older than Aminet |
If local version is up-to-date |
TINAPAMA v0.8 (Aug 14 2025) © 2025-2026 Tygre
Using AmiModRadio.tinapama
Setting up logging: Ok
Setting up description file: Ok
Setting up data file: Ok
Setting up local drawer: Ok
Getting destination drawer: Ok
Parsing version file address: Ok
Parsing remote file address: Ok
Getting remote file content type: Ok
Getting remote file content drawer: Ok
Getting remote version file: Ok
Saving remote version file: Ok
Getting files list: Ok
Getting remote version file type: Ok
Getting archived version file: Ok
Getting remote version file analysis: Ok
Parsing remote version file: Ok
Getting local version: Ok
Is local version up-to-date? No
Getting remote file: Ok
Saving remote file: Ok
Getting files list: Ok
Copying remote files to local drawer: Ok
Running after-update script (if any): Ok
Updating local data to new version: Ok
Updated Utilitaires:Musique/Divers/AmiModRadio/
with package mus/play/AmiModRadio.lha
Deleting (some) temporary files: Ok
Good bye!
|
TINAPAMA v0.9 (Aug 14 2025) © 2025-2026 Tygre
Using AmiModRadio.tinapama
Setting up logging: Ok
Setting up description file: Ok
Setting up data file: Ok
Setting up local drawer: Ok
Getting destination drawer: Ok
Parsing version file address: Ok
Parsing remote file address: Ok
Getting remote file content type: Ok
Getting remote file content drawer: Ok
Getting remote version file: Ok
Saving remote version file: Ok
Getting files list: Ok
Getting remote version file type: Ok
Getting archived version file: Ok
Getting remote version file analysis: Ok
Parsing remote version file: Ok
Getting local version: Ok
Is local version up-to-date? Yes
Good bye!
|
TINAPAMA uses a description file to locate the remote version of a program and compare its version with the version in the local drawer. You can use ready-made description files or create your own. The drawer being updated is the drawer in which the description file, typically ending with .tinapama (e.g., AmiModRadio.tinapama above), is located. In addition to any file updated by TINAPAMA, a new file called TINAPAMA.data will be created in the drawer to contain local version information.
TINAPAMA works, of course , with Aminet packages: with or without the Version: field in their READMEs, with or without top drawers in their archives. It also works with packages in GitHub and should work all the same with packages in BitBucket, CodeBerg, or SourceForge!
Description File Format
The table below describe the domain-specific language used to describe updates. All options and values are case insensitive, except for URLs: http://aminet.net/package/mus/play/AmiModRadio exists, http://aminet.net/package/mus/play/aMiMoDrAdIo doesn't!
Description File Format
Options |
Examples |
Values |
Comments |
remote_version_file_address |
http://aminet.net/mus/play/AmiModRadio.readme |
A URL with FTP, HTTP, or HTTPS scheme |
Always mandatory, usually should point to a README file but can also point to an archive or executable |
remote_version_file_type |
FILE |
FILE (default) or ARCHIVE |
Always mandatory, tells if the version file should be unarchived |
remote_version_file_archived_version_file |
YACDP 1.2/YACDP |
A path to a file within the archive |
Mandatory with remove_version_file_type=ARCHIVE, tells which file, inside the archive, from which to get version information |
remote_version_file_analysis |
AMINETREADMEVERSION |
AMINETREADMEVERSION (default), AMINETPACKAGEDATE, or AMIGADOSVERSION |
Optional, tells how to get version information from the file/archive |
|
remote_main_file_address |
ftp://ftp.aminet.net/mus/play/AmiModRadio.lha |
A URL with FTP, HTTP, or HTTPs scheme |
Always mandatory, usually should point to an archive containing the files from which to update |
ARCHIVE |
ARCHIVE |
ARCHIVE (default) or FILE |
Always mandatory, tells if the remote file should be unarchived |
remote_main_file_archived_content |
INDRAWER |
INDRAWER (default) or NODRAWER |
Always mandatory, tells if the files from which to update are at the top-level of the archive or in some drawer(s) |
remote_main_file_archived_content_drawer |
YACDP 1.2/ |
A path to a drawer within the archive |
Mandatory with remote_main_file_archived_content=INDRAWER, tells in which drawer of the archive to find the files/drawers with which to update |
|
local_drawer_icon |
OVERWRITE |
KEEP (default) or OVERWRITE |
Optional, tells if the icon of the drawer being updated should be kept "as is" (maybe a nice MagicWB icon? ) or overwritten (by some B&W v1.3 drawer icon? ) |
local_drawer_window |
UPDATE |
KEEP (default) or UPDATE |
Optional, tells if the icon of the drawer being updated should have its properties updated: position, size, view mode... Useful with local_drawer_icon=KEEP to keep your nice icons by see the content of the drawer as intended |
local_drawer_subdrawer |
Prefs/ |
A path to a subdrawer of the local drawer in which to update the files |
Optional, useful if multiple packages must be installed in the same drawer but would overwrite each other's files, like ABackup and Prefs/ABackup |
local_drawer_script |
Assign ReOrg: "" | Execute patch.exec |
A set of AmigaDOS commands separated by | |
Optional, useful if some post-processing is necessary after updating the files, like patching some files, extracting some archive within the archive, etc. |
(local_drawer_content) |
OVERWRITE |
OVERWRITE (default) or PURGE |
Optional, not yet implemented |
(local_drawer_protected_files) |
file1,file2,... |
Some paths to local files |
Optional, not yet implemented |
(local_drawer_protected_dirs) |
drawer1,drawer2,... |
Some paths to local drawers |
Optional, not yet implemented |
Ready-made Description Files
Read-made description files in alphabetical order of the programs!
Roadmap
Some options are yet to be implemented:
- Purge of the destination drawer before copying new files
- Protection of some local files from behind overwritten.
Details
TINAPAMA is written in C with Cubic IDE and vbcc for the coding, GadToolsBox for the GUI design, and SimpleCat for the internationalisation.
1 Icon from Flaticon in Home Screen Apps pack, free for personal and commercial purpose with attribution.
The last three changes:Tygre - 2025-08-23 14:24:18 | Tygre - 2025-08-23 14:15:46 | Tygre - 2025-08-23 14:14:29
|