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! 

 

Buy me a coffee if you like 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!

 

Ready-made and Tested Description Files
Program Name Address Comment
ABackup http://aminet.net/package/disk/bakup/abackup  
ABackup Prefs http://aminet.net/package/disk/bakup/abackup Installs in a sub-drawer Prefs/ to not overwrite ABackup proper
ACDPlay http://aminet.net/package/disk/cdrom/ACDPlay_16  
AmiCDFS http://aminet.net/package/disk/cdrom/amicdfs240 Uses the AmigaGuide to get version information
AmigaE Compiler http://aminet.net/package/dev/e/ec33a  
AmigaE Distrib http://aminet.net/package/dev/e/amigae33a Uses local_drawer_script to unarchive Modules.lha
AmiModRadio http://aminet.net/package/mus/play/AmiModRadio The program for which it all started!
AmiTEL http://aminet.net/package/comm/term/AmiTEL310 Example of NODRAWER
AnimInWindow http://aminet.net/package/gfx/show/AnimInWindow  
ARexxSupervisor http://aminet.net/package/util/rexx/ARexxSuperviso  
BetaScan http://aminet.net/package/driver/other/BetaScan_v3  
BigAnim http://aminet.net/package/gfx/show/BigAnim40  
BootX http://aminet.net/package/util/virus/BootX_V5.23  
CloudsAGA http://aminet.net/package/gfx/edit/CloudsAGA  
Collector http://aminet.net/package/gfx/misc/Collector  
CrunchMania http://aminet.net/package/util/pack/CrMv191t  
CrunchDisk http://aminet.net/package/disk/misc/Diskspr3 Part of a larger archive
Degrader http://aminet.net/package/util/misc/Degrader  
DeTar http://aminet.net/package/util/arc/DeTar  
DiskSalv http://aminet.net/package/disk/salv/DiskSalv  
DMS http://aminet.net/package/util/arc/abfdik40 Part of a larger archive
DNet http://aminet.net/package/comm/net/dnet2.10.13  
DOpus https://sourceforge.net/projects/diropus4/files/DirectoryOpus4-OS3/  
DPaint v4.6 Patch http://aminet.net/package/gfx/edit/dpaint4.6patch  
EasyACDDA http://aminet.net/package/disk/cdrom/EasyACDDA  
Embedder II http://aminet.net/package/util/misc/EmbedderII  
EZCron http://aminet.net/package/util/time/ezcron4  
EZHome http://aminet.net/package/misc/misc/ezhome  
FiDED http://aminet.net/package/util/misc/FiDED39553  
GhostScript Binaries http://aminet.net/package/text/dtp/gs860_nofpu  
GhostScript Core http://aminet.net/package/text/dtp/gs860_core  
GhostScript Fonts http://aminet.net/package/text/dtp/gs860_fonts  
GuiArc http://aminet.net/package/util/arc/GuiArc  
GZip http://aminet.net/package/util/pack/gzip124x2  
Heddley http://aminet.net/package/text/hyper/Heddley120beta  
Heddley Fix http://aminet.net/package/text/hyper/FixHeddley1.2  
HippoPlayerUpdate http://aminet.net/package/mus/play/hippoplayerupdate  
Iconian http://aminet.net/package/gfx/edit/Iconian2_98u  
Iconian Keyfile http://aminet.net/package/gfx/edit/IconianKey  
Iconizer http://aminet.net/package/gfx/conv/Iconizer  
Imploder http://aminet.net/package/util/pack/imploder-4.0  
KillAGA http://aminet.net/package/util/wb/WBKillAGA Part of a larger archive
LHWarp http://aminet.net/package/util/arc/lhwarp-1.40  
Lyapunovia http://aminet.net/package/gfx/misc/Lyapunovia15  
LZX http://aminet.net/package/util/arc/lzx121r1  
MakeCD http://aminet.net/package/disk/cdrom/MakeCD_3.2d  
MakeIcon http://aminet.net/package/util/cli/MakeIcon1_5  
Mand2000Demo http://aminet.net/package/gfx/fract/Mand2000demo  
MandelMania http://aminet.net/package/gfx/fract/MandelMania41  
MathScript http://aminet.net/package/misc/math/MathScript32  
MCDPlay http://aminet.net/package/disk/cdrom/mcdplay  
MP http://aminet.net/package/gfx/show/mp103  
NETMount http://aminet.net/package/comm/net/netmount  
ParBENCH http://aminet.net/package/comm/net/ParBENCH31  
PKAZip http://aminet.net/package/util/arc/PKAZip  
PostView http://aminet.net/package/text/print/PostView1.2  
PPMC http://aminet.net/package/util/pack/PPMC  
ReOrg http://aminet.net/package/disk/optim/ReOrg3_1  
ReOrg Patch http://aminet.net/package/disk/optim/ReOrg3_11pch Executes the patch on ReOrg
RXTrace http://aminet.net/package/util/rexx/RXTrace  
SCDP http://aminet.net/package/disk/cdrom/SkandalfoCDP  
Scenery http://aminet.net/package/gfx/misc/Scenery  
SetChipRev http://aminet.net/package/util/misc/SCR_Patched  
SMBFS https://github.com/obarthel/amiga-smbfs/releases Hosted on GitHub
StoneCracker http://aminet.net/package/util/pack/Stc4103  
Tar http://aminet.net/package/util/arc/tar  
Term http://aminet.net/package/comm/term/term-030  
UnARJ http://aminet.net/package/util/arc/UnARJ241_104  
UnixDirs3 http://aminet.net/package/util/boot/UnixDirs3  
UnTar http://aminet.net/package/util/pack/UntarV1_11  
UnZip http://aminet.net/package/util/arc/UnZip  
UUxT http://aminet.net/package/util/arc/uuxt31  
VirusChecker II http://aminet.net/package/util/virus/vht-vc25  
VirusChecker II Keyfile http://aminet.net/package/util/virus/vht-vckey  
VirusZ http://aminet.net/package/util/virus/VirusZ  
Visage http://aminet.net/package/gfx/show/Visage  
Wet http://aminet.net/package/util/wb/wet  
Wet Update http://aminet.net/package/util/wb/wet_update  
XAnim http://aminet.net/package/gfx/show/xanim8  
X-Copy https://jope.fi/xcopy/zip/xcopy/xc9309en.zip Hosted on jope.fi
YACDP http://aminet.net/package/disk/cdrom/YACDP1.2  
Zoo http://aminet.net/package/util/arc/zoo2-10  
Zoom http://aminet.net/package/util/arc/Zoom_5.4  

 

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