Start working on the MS Works Portfolio

This commit is contained in:
~lucidiot 2024-05-05 03:10:35 +02:00
parent a011cd8b47
commit a0980e69c2
2 changed files with 265 additions and 10 deletions

View File

@ -14,19 +14,10 @@ I am for now focusing on Microsoft Works 8.0 and 9.0, as 8.0 is the last version
* [Microsoft Works Task Launcher](./tasklauncher.html)
* [Microsoft Works Calendar](./calendar.html)
* [Microsoft Works Portfolio](./portfolio.html)
* [Default fonts in Microsoft Works Spreadsheet and Database](./defaultfonts.html)
* [Microsoft Works Word Processor Format Gallery](./formatgallery.html)
## Portfolio
The Works Portfolio is Works' answer to Microsoft Office Binder. It is a lot more basic than Binder though; where Binder can transform itself into whatever program is needed to display each supported file, Portfolio just groups some files together, supports copy-pasting to and from those collections of files, lets you add comments, and lets you send those files to a new Word Processor document, a printer, an e-mail recipient or a folder. You can get a preview for a few supported formats, but to open a file, you will first have to send it to a folder and open it yourself. If you need to update the file, first remove the old file, and then put the new one back in. This is more like the Office Clipboard Manager than Binder!
The executable for Works Portfolio is named `WksSb.exe`, which might mean *Works Shoebox*. This is not to be confused with the Shoebox file format.
::: todo
Look into the file format of the Works Portfolio
:::
## Shoebox
The clip art that can be inserted into Works documents relies on multiple files:
@ -51,4 +42,8 @@ Starting with Works 9.0, an XML file stores all of the tips shown under the *Tip
Of course, I wrote [an XML schema for it](../xsd/TipFormat.xsd).
::: todo
Write scripts to generate custom tips from `fortune` files
:::
[justsolve-works]: http://fileformats.archiveteam.org/wiki/Microsoft_Works

View File

@ -0,0 +1,260 @@
---
title: Microsoft Works Portfolio
---
The Portfolio is Microsoft Works' answer to Microsoft Office Binder. It is a lot more basic than Binder though; where Binder can transform itself into whatever program is needed to display each supported file, Portfolio just groups some files together, supports copy-pasting to and from those collections of files, lets you add comments, and lets you send those files to a new Word Processor document, a printer, an e-mail recipient or a folder. You can get a preview for a few supported formats, but to open a file, you will first have to send it to a folder and open it yourself. If you need to update the file, first remove the old file, and then put the new one back in. This is more like the Office Clipboard Manager than Binder!
The executable for Works Portfolio is named `WksSb.exe`, which might mean *Works Shoebox*. This is not to be confused with the actual Shoebox, which is the Works clipart manager.
The Portfolio stores its files under `%USERPROFILE%\Local Settings\Application Data\Microsoft\Works\Portfolio`, or on Vista and later, `%LOCALAPPDATA%\Microsoft\Works\Portfolio`. Two files exist for each collection created with the Portfolio, both named after the collection's name:
* `<Name>.wsb`, whose extension probably stands for *Works Shoebox* again, is a [Compound File Binary][ms-cfb] holding the entire collection metadata and file contents.
* `<Name>.dir` is a hidden directory created by the Portfolio as a cache, to avoid having to extract files all of the time.
## WSB files
::: todo
* Document the CFB structure
* Test with files other than images
* Test with large files
* Write a Windows 2000-compatible CFB extractor
:::
The WSB files hold the entire collection. This includes the file names, file sizes, file contents, thumbnails, comments, original paths, and order of the files within the collection. These are stored in a very common binary format for Microsoft apps of the time, [Compound File Binary][ms-cfb]. This format is a mini-filesystem, with a file allocation table, sectors, etc., which can hold directories and files, known as *storages* and *streams*. A CFB file can contains streams and storages, and storages can also contain streams and other storages.
```
├── 1
│   ├── __bthumb
│   ├── __cf1
│   ├── __fname
│   ├── __size
│   └── __thumb
├── __CountDelayThumb
├── __IDsDelayThumb
├── __LastID
├── PfOrder
├── PfSelection
└── __SizeUsed
```
### Root streams
`__CountDelayThumb`
: TODO
`__IDsDelayThumb`
: TODO
`__LastID`
: TODO
`PfOrder`
: TODO
`PfSelection`
: TODO
`_SizeUsed`
: TODO
### Streams per file
`__bthumb`
: TODO
`__cf1`
: File contents, prefixed with 24 bytes of data.
`__fname`
: TODO
`__size`
: TODO
`__thumb`
: TODO
## Cache directory
The cache directory, holding the same name as the WSB file but with a `.dir` extension, is automatically created by the Portfolio and marked as hidden. It contains each file in the collection, extracted from the WSB file, with its real name and other attributes, each within a separate directory holding the same name as the storages in the WSB.
## Registry
The Portfolio stores its settings in the Registry:
```ini
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio]
[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio\Frame]
"WidgetLastRc_Left"=dword:00000601
"WidgetLastRc_Right"=dword:00000650
"WidgetLastRc_Top"=dword:00000000
"WidgetLastRc_Bottom"=dword:0000002c
"TbLastRc_Left"=dword:00000719
"TbLastRc_Right"=dword:00000768
"TbLastRc_Top"=dword:00000000
"TbLastRc_Bottom"=dword:0000002c
"WidgetEdgeIndexTbMode"=dword:00000002
"WidgetEdgeIndexWidgMode"=dword:00000001
"WidgetSize_Cx"=dword:0000009e
"WidgetSize_Cy"=dword:000001b8
"Widget_Pinning"=dword:00000000
"PfViewMode"=dword:00000000
[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio\Options]
"ShowMeNoHelp"=dword:00000001
"NoSounds"=dword:00000000
[HKEY_CURRENT_USER\Software\Microsoft\Works\8.0\Portfolio\Views]
"AnnDlgSize_Cx"=dword:00000206
"AnnDlgSize_Cy"=dword:00000177
"LastPortfolio"="Portfolio Name"
"DropHRect_Left"=dword:00000000
"DropHRect_Right"=dword:00000066
"DropHRect_Top"=dword:00000000
"DropHRect_Bottom"=dword:00000066
"DropVRect_Left"=dword:00000719
"DropVRect_Right"=dword:00000780
"DropVRect_Top"=dword:00000000
"DropVRect_Bottom"=dword:0000041c
"DropSnappyRect_Left"=dword:00000601
"DropSnappyRect_Right"=dword:00000668
"DropSnappyRect_Top"=dword:0000002a
"DropSnappyRect_Bottom"=dword:000001ba
"Drop_EdgeIndex"=dword:00000001
"Drop_ToolBar"=dword:00000000
"BigModeRect_Left"=dword:00000280
"BigModeRect_Right"=dword:00000500
"BigModeRect_Top"=dword:0000012c
"BigModeRect_Bottom"=dword:000002f0
"BigModeMaximized"=dword:00000000
```
::: todo
Document those values
:::
### Frame
`WidgetLastRc_Left`
: TODO
`WidgetLastRc_Right`
: TODO
`WidgetLastRc_Top`
: TODO
`WidgetLastRc_Bottom`
: TODO
`TbLastRc_Left`
: TODO
`TbLastRc_Right`
: TODO
`TbLastRc_Top`
: TODO
`TbLastRc_Bottom`
: TODO
`WidgetEdgeIndexTbMode`
: TODO
`WidgetEdgeIndexWidgMode`
: TODO
`WidgetSize_Cx`
: TODO
`WidgetSize_Cy`
: TODO
`Widget_Pinning`
: TODO
`PfViewMode`
: TODO
### Options
`ShowMeNoHelp`
: TODO
`NoSounds`
: TODO
### Views
`AnnDlgSize_Cx`
: TODO
`AnnDlgSize_Cy`
: TODO
`LastPortfolio`
: TODO
`DropHRect_Left`
: TODO
`DropHRect_Right`
: TODO
`DropHRect_Top`
: TODO
`DropHRect_Bottom`
: TODO
`DropVRect_Left`
: TODO
`DropVRect_Right`
: TODO
`DropVRect_Top`
: TODO
`DropVRect_Bottom`
: TODO
`DropSnappyRect_Left`
: TODO
`DropSnappyRect_Right`
: TODO
`DropSnappyRect_Top`
: TODO
`DropSnappyRect_Bottom`
: TODO
`Drop_EdgeIndex`
: TODO
`Drop_ToolBar`
: TODO
`BigModeRect_Left`
: TODO
`BigModeRect_Right`
: TODO
`BigModeRect_Top`
: TODO
`BigModeRect_Bottom`
: TODO
`BigModeMaximized`
: TODO
[ms-cfb]: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b