TINAPAMA / 2025-08-14 22:31:51

1

Have you ever found yourselves installing the same program over and over again, on your different Amigas? You can now automate this process, even at distance, with TINAPAMA! 

 

Buy me a coffee if you like TINAPAMA! ☕🍻🍕📖

 

In a Nutshell

TINAPAMA (TINAPAMA is Not A PAckage MAnager) brings automated program installation on Classic Amigas. It supercedes AmiAutoUpdate, which had a different philosophy and was never completed. It differs from AmiUpdate on AmigaOS 4 and EasyInstall 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.

Note: 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! 

  • 2025/08/14, v0.9: first public release of TINAPAMA. This release implements all the options that have been useful to update more than 80 programs on my A4000!

 

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).

 

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 descriptions 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.

So, to update AmiModRadio to its latest version in Aminet, using the description file below, you could issue the following command from anywhere:

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.

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

In alphabetical order of the programs!

 

Ready-made and Tested Description Files
Program Name Address Comment
ABackup ftp://ftp.aminet.net/disk/bakup/abackup.lha  
ABackup Prefs ftp://ftp.aminet.net/disk/bakup/abackup.lha Installs in a sub-drawer Prefs/ to not overwrite ABackup proper
ACDPlay ftp://aminet.net/disk/cdrom/ACDPlay_16.lha  
AmiCDFS ftp://ftp.aminet.net/disk/cdrom/amicdfs240.lha Uses the AmigaGuide to get version information
AmigaE Compiler ftp://ftp.aminet.net/dev/e/ec33a.lha  
AmigaE Distrib http://aminet.net/package/dev/e/amigae33a Example of local_drawer_script: unarchives the modules (Modules.lha in the archive)
AmiModRadio http://aminet.net/mus/play/AmiModRadio.readme The program for which it all started!
AmiTEL ftp://ftp.aminet.net/comm/term/AmiTEL310.lha Example of NODRAWER
AnimInWindow http://aminet.net/package/gfx/show/AnimInWindow  
ARexxSupervisor http://aminet.net/util/rexx/ARexxSuperviso.readme  
BetaScan ftp://ftp.aminet.net/driver/other/BetaScan_v3.lha  
BigAnim ftp://ftp.aminet.net/gfx/show/BigAnim40.lha  
BootX ftp://ftp.aminet.net/util/virus/BootX_V5.23.lha  
CloudsAGA http://aminet.net/package/gfx/edit/CloudsAGA  
Collector http://aminet.net/gfx/misc/Collector.readme  
CrunchMania ftp://ftp.aminet.net/util/pack/CrMv191t.lha  
CrunchDisk http://aminet.net/package/disk/misc/Diskspr3 Part of a larger archive
Degrader http://aminet.net/package/util/misc/Degrader  
DeTar ftp://ftp.aminet.net/util/arc/DeTar.lha  
DiskSalv http://aminet.net/disk/salv/DiskSalv.readme  
DMS http://aminet.net/util/arc/abfdik40.readme Part of a larger archive
DNet http://aminet.net/package/comm/net/dnet2.10.13  
DOpus https://master.dl.sourceforge.net/project/diropus4/DirectoryOpus4-OS3/DOpus417pre21.lzx  
DPaint 4.6 Patch Only http://aminet.net/package/gfx/edit/dpaint4.6patch  
EasyACDDA http://aminet.net/disk/cdrom/EasyACDDA.readme  
Embedder II http://aminet.net/package/util/misc/EmbedderII  
EZCron http://aminet.net/package/util/time/ezcron4  
EZHome http://aminet.net/misc/misc/ezhome.readme  
FiDED http://aminet.net/util/misc/FiDED39553.readme  
GhostScript Binaries http://aminet.net/text/dtp/gs860_nofpu.readme  
GhostScript Core http://aminet.net/text/dtp/gs860_core.readme  
GhostScript Fonts http://aminet.net/text/dtp/gs860_fonts.readme  
GuiArc ftp://ftp.aminet.net/util/arc/GuiArc.lha  
GZip ftp://ftp.aminet.net/util/pack/gzip124x2.lha  
Heddley ftp://ftp.aminet.net/text/hyper/Heddley120beta.lha  
Heddley Fix ftp://ftp.aminet.net/text/hyper/FixHeddley1.2.lha  
HippoPlayerUpdate http://aminet.net/mus/play/hippoplayerupdate.readme  
Iconian ftp://ftp.aminet.net/gfx/edit/Iconian2_98u.lha  
Iconian Keyfile =http://aminet.net/package/gfx/edit/IconianKey  
Iconizer ftp://ftp.aminet.net/gfx/conv/Iconizer.lha  
Imploder ftp://ftp.aminet.net/util/pack/imploder-4.0.lzh  
KillAGA http://aminet.net/package/util/wb/WBKillAGA Part of a larger archive
LHWarp ftp://ftp.aminet.net/util/arc/lhwarp-1.40.lzh  
Lyapunovia http://aminet.net/package/gfx/misc/Lyapunovia15  
LZX ftp://ftp.aminet.net/util/arc/lzx121r1.lha  
MakeCD http://aminet.net/disk/cdrom/MakeCD_3.2d.readme  
MakeIcon ftp://ftp.aminet.net/util/cli/MakeIcon1_5.lha  
Mand2000Demo http://aminet.net/package/gfx/fract/Mand2000demo  
MandelMania ftp://ftp.aminet.net/gfx/fract/MandelMania41.lha  
MathScript ftp://ftp.aminet.net/misc/math/MathScript32.lha  
MCDPlay ftp://ftp.aminet.net/disk/cdrom/mcdplay.lha  
MP ftp://ftp.aminet.net/gfx/show/mp103.lha  
NETMount http://aminet.net/comm/net/netmount.lha  
ParBENCH http://aminet.net/package/comm/net/ParBENCH31  
PKAZip http://aminet.net/util/arc/PKAZip.readme  
PostView ftp://ftp.aminet.net/text/print/PostView1.2.lha  
PPMC ftp://ftp.aminet.net/util/pack/PPMC.lha  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

 

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.