feat(print): add initial draft and assets for Nerdletter Issue 1
Introduce Scribus draft (.sla and PDF), assets including images and binaries, scripts for processing, and archival content from Antic magazine.
BIN
print/Nerdletter_Issue1_Draft.pdf
Normal file
470
print/Nerdletter_Issue1_Draft.sla
Normal file
@ -0,0 +1,470 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<SCRIBUSUTF8NEW Version="1.7.2">
|
||||
<Document PageCount="4" PageWidth="595.275590551181" PageHeight="841.889763779528" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" MarginPreset="0" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" PageOrientation="0" PageSize="IsoA_A04" FirstPageNumber="1" PagePositioning="0" AutomaticTextFrameColumnCount="1" AutomaticTextFrameColumnGap="11" UnitIndex="1" FontFace="DejaVu Sans Book" FontSize="12" TextColumnCount="1" TextColumnGap="0" TabFillCharacter="" TabWidth="36" TextDistanceLeft="0" TextDistanceRight="0" TextDistanceBottom="0" TextDistanceTop="0" FirstLineOffset="1" DocumentInfoAuthor="" DocumentInfoComments="" DocumentInfoKeywords="" DocumentInfoPublisher="" DocumentInfoDate="" DocumentInfoType="" DocumentInfoFormat="" DocumentInfoIdentifier="" DocumentInfoSource="" DocumentInfoLanguage="" DocumentInfoRelation="" DocumentInfoCoverage="" DocumentInfoRights="" DocumentInfoContributors="" DocumentInfoTitle="" DocumentInfoSubject="" SuperScriptDisplacement="33" SuperScriptScaling="66" SubScriptDisplacement="33" SubScriptScaling="66" SmallCapsScaling="75" BaselineGridSpacing="14.4" BaselineGridOffset="0" AutoLineSpacingPct="100" UnderlinePosition="-1" UnderlineWidth="-1" StrikeThruPosition="-1" StrikeThruWidth="-1" GroupCounter="2" DocumentHasCMS="0" SoftProofOn="0" SoftProofFullOn="0" ColorManagementActive="0" GamutCheck="0" BlackPoint="1" DefaultPrinterProfile="ISO Coated v2 300% (basICColor)" DefaultImageRGBProfile="sRGB display profile (ICC v2.2)" DefaultImageCMYKProfile="ISO Coated v2 300% (basICColor)" DefaultSolidColorRGBProfile="sRGB display profile (ICC v2.2)" DefaultSolidColorCMYKProfile="ISO Coated v2 300% (basICColor)" DefaultIntentColors="1" DefaultIntentImages="0" ActiveLayer="0" Language="en_GB" AutomaticHyphenation="1" AutomaticHyphenationCheck="0" GuideLock="0" SnapToGuides="0" SnapToGrid="0" SnapToItems="0" MinorGridSpacing="20.001" MajorGridSpacing="100.001" ShowGrid="0" ShowGuides="1" ShowColumnBorders="1" ShowFrames="1" ShowControls="0" ShowLayerMarkers="0" ShowMargins="1" ShowBaselineGrid="0" ShowImages="1" ShowLinks="0" RulerMode="1" ShowRulers="1" ShowBleed="1" RulerXOffset="0" RulerYOffset="0" GuideRadius="10" GrabRadius="4" PolygonCorners="4" PolygonFactor="0.502" PolygonRotation="0" PolygonInnerRotation="0" PolygonCurvature="0" PolygonOuterCurvature="0" PolygonUseFactor="0" ArcStartAngle="30" ArcSweepAngle="300" SpiralStartAngle="0" SpiralEndAngle="1080" SpiralFactor="1.2" AutoSave="1" AutoSaveTime="600000" AutoSaveCount="1" AutoSaveKeep="0" AutoSaveInDocumentDirectory="1" AutoSaveDirectory="" ScratchBottom="20.001" ScratchLeft="100.001" ScratchRight="100.001" ScratchTop="20.001" GapHorizontal="0" GapVertical="40" LineStartArrow="0" LineEndArrow="0" ShapeLineColor="Black" ShapeFillColor="None" LineColor="Black" TextColor="Black" TextStrokeColor="Black" TextBackgroundColor="None" TextLineColor="None" TextBackgroundColorShade="100" TextLineColorShade="100" TextColorShade="100" TextStrokeColorShade="100" ShapeLineStyle="1" LineStyle="1" ShapeLineWidth="1" LineWidth="1" ShapeLineColorShade="100" LineColorShade="100" ShapeFillColorShade="100" ImageFillColor="None" ImageFillColorShade="100" ImageStrokeColor="None" ImageStrokeColorShade="100" ImageScaleX="1" ImageScaleY="1" ImageScaleType="1" ImageAspectRatio="1" ImageUseEmbeddedPath="0" ImageLowResType="1" DisplayOffsetX="10.001" DisplayOffsetY="10.001" RotationConstrainAngle="15" MinorGridColor="#00ff00" MajorGridColor="#00ff00" GuidesColor="#000080" BaselineGridColor="#c0c0c0" RenderStack="2 0 4 1 3" GridType="0" PageColor="#ffffff" MarginColor="#0000ff" ShowMarginsFilled="0" CurrentProfile="PDF 1.6" CalligraphicPenFillColor="Black" CalligraphicPenLineColor="Black" CalligraphicPenFillColorShade="100" CalligraphicPenLineColorShade="100" CalligraphicPenLineWidth="1" CalligraphicPenAngle="0" CalligraphicPenWidth="10" CalligraphicPenStyle="1">
|
||||
<CheckProfile Name="PDF 1.3" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<CheckProfile Name="PDF 1.4" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<CheckProfile Name="PDF 1.5" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<CheckProfile Name="PDF 1.6" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="0" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<CheckProfile Name="PDF/X-1a" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="1" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="1" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<CheckProfile Name="PDF/X-3" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="1" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="1" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<CheckProfile Name="PDF/X-4" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="1" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="1" CheckFontNotEmbedded="1" CheckFontIsOpenType="0" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<CheckProfile Name="PostScript" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="0" CheckFontIsOpenType="0" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
|
||||
<Color Name="Black" Space="CMYK" C="0" M="0" Y="0" K="100"/>
|
||||
<Color Name="Registration" Space="CMYK" C="100" M="100" Y="100" K="100" Register="1"/>
|
||||
<Color Name="White" Space="CMYK" C="0" M="0" Y="0" K="0"/>
|
||||
<Hyphenator/>
|
||||
<CharacterStyle Name="Default Character Style" DefaultStyle="1" Font="DejaVu Sans Book" FontSize="12" FontFeatures="" Features="inherit" FontColor="Black" FillShade="100" HyphenWordMinimum="3" StrokeColor="Black" BackgroundColor="None" BackgroundShade="100" StrokeShade="100" TextShadowXOffset="5" TextShadowYOffset="-5" TextOutlineWidth="1" TextUnderlineOffset="-0.1" TextUnderlineWidth="-0.1" TextStrikeThroughOffset="-0.1" TextStrikeThroughWidth="-0.1" ScaleHorizontal="100" ScaleVertical="100" BaselineOffset="0" Kerning="0" Language="en_GB"/>
|
||||
<CharacterStyle Name="IBM CGA" Font="Px IBM CGA Regular" FontFeatures="-liga,-clig" Language="en_GB"/>
|
||||
<ParagraphStyle Name="Default Paragraph Style" DefaultStyle="1" Alignment="0" Direction="0" LineSpacingMode="0" LineSpacing="15" LeftMargin="0" RightMargin="0" FirstIndent="0" GapBefore="0" GapAfter="0" ParagraphEffectOffset="0" HasDropCap="0" DropCapLines="2" Bullet="0" Numeration="0" HyphenConsecutiveLines="2" ParagraphBackgroundColor="None" ParagraphBackgroundColorShade="100"/>
|
||||
<ParagraphStyle Name="IBM CGA TITLE" Font="Px IBM CGA Regular" FontSize="14" FontFeatures="-liga,-clig"/>
|
||||
<ParagraphStyle Name="Table Of Contents" Parent="IBM CGA TITLE" ParagraphEffectCharStyle="IBM CGA" HasDropCap="0" Bullet="1" BulletStr="►" Numeration="0" CParent="IBM CGA" FontSize="8"/>
|
||||
<TableStyle Name="Default Table Style" DefaultStyle="1" FillColor="None" FillShade="100">
|
||||
<TableBorderLeft>
|
||||
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
|
||||
</TableBorderLeft>
|
||||
<TableBorderRight>
|
||||
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
|
||||
</TableBorderRight>
|
||||
<TableBorderTop>
|
||||
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
|
||||
</TableBorderTop>
|
||||
<TableBorderBottom>
|
||||
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
|
||||
</TableBorderBottom>
|
||||
</TableStyle>
|
||||
<CellStyle Name="Default Cell Style" DefaultStyle="1" FillColor="None" FillShade="100" LeftPadding="1" RightPadding="1" TopPadding="1" BottomPadding="1"/>
|
||||
<Layers Number="0" Level="0" Name="Background" IsViewable="1" IsPrintable="1" IsEditable="1" IsSelectable="0" FlowControl="1" Transparency="1" BlendMode="0" OutlineMode="0" LayerColor="#000000"/>
|
||||
<Printer firstUse="0" toFile="0" useAltPrintCommand="0" outputSeparations="0" useSpotColors="1" useColor="1" mirrorH="0" mirrorV="0" useICC="0" doGCR="0" doClip="0" setDevParam="0" useDocBleeds="1" cropMarks="0" bleedMarks="0" registrationMarks="0" colorMarks="0" includePDFMarks="1" PSLevel="3" PrintEngine="3" markLength="20.0012598425197" markOffset="0" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" printer="EPSON_LQ-350" filename="" separationName="All" printerCommand="">
|
||||
<Separation Name="Cyan"/>
|
||||
<Separation Name="Magenta"/>
|
||||
<Separation Name="Yellow"/>
|
||||
<Separation Name="Black"/>
|
||||
</Printer>
|
||||
<PDF firstUse="1" Thumbnails="0" Articles="0" Bookmarks="0" Compress="1" CMethod="0" Quality="0" EmbedPDF="0" MirrorH="0" MirrorV="0" Clip="0" rangeSel="0" rangeTxt="" RotateDeg="0" PresentMode="0" RecalcPic="0" FontEmbedding="0" Grayscale="0" RGBMode="1" UseProfiles="0" UseProfiles2="0" Binding="0" PicRes="300" Resolution="300" Version="14" Intent="1" Intent2="0" SolidP="sRGB display profile (ICC v2.2)" ImageP="sRGB display profile (ICC v2.2)" PrintP="ISO Coated v2 300% (basICColor)" InfoString="" BTop="0" BLeft="0" BRight="0" BBottom="0" useDocBleeds="1" cropMarks="0" bleedMarks="0" registrationMarks="0" colorMarks="0" docInfoMarks="0" markLength="20.0012598425197" markOffset="0" ImagePr="0" PassOwner="" PassUser="" Permissions="-4" Encrypt="0" UseLayers="0" UseLpi="0" UseSpotColors="1" doMultiFile="0" displayBookmarks="0" displayFullscreen="0" displayLayers="0" displayThumbs="0" hideMenuBar="0" hideToolBar="0" fitWindow="0" openAfterExport="0" PageLayout="0" openAction="">
|
||||
<LPI Color="" Frequency="0" Angle="0" SpotFunction="0"/>
|
||||
<LPI Color="Black" Frequency="133" Angle="45" SpotFunction="3"/>
|
||||
<LPI Color="Cyan" Frequency="133" Angle="105" SpotFunction="3"/>
|
||||
<LPI Color="Magenta" Frequency="133" Angle="75" SpotFunction="3"/>
|
||||
<LPI Color="Yellow" Frequency="133" Angle="90" SpotFunction="3"/>
|
||||
</PDF>
|
||||
<DocItemAttributes/>
|
||||
<Indexes/>
|
||||
<TablesOfContents/>
|
||||
<NotesStyles>
|
||||
<notesStyle Name="Default" Start="1" Endnotes="0" Type="Type_1_2_3" Range="0" Prefix="" Suffix=")" AutoHeight="1" AutoWidth="1" AutoRemove="1" AutoWeld="1" SuperNote="1" SuperMaster="1" MarksStyle="" NotesStyle=""/>
|
||||
</NotesStyles>
|
||||
<OpticalMarginSets>
|
||||
<Set Id="preset_0" Type="preset" Name="Default">
|
||||
<Rules>
|
||||
<Rule Left="0" Right="0.5" Unit="7" Characters="U+003A,U+003B,U+2013,U+2033"/>
|
||||
<Rule Left="0" Right="0.75" Unit="7" Characters="U+002C,U+002D,U+002E,U+2010,U+2032"/>
|
||||
<Rule Left="0.25" Right="0.25" Unit="7" Characters="U+2014"/>
|
||||
<Rule Left="0.5" Right="0" Unit="7" Characters="U+2036"/>
|
||||
<Rule Left="0.5" Right="0.5" Unit="7" Characters="U+0022,U+0028,U+0029,U+005B,U+005D,U+00AB,U+00BB,U+201C,U+201D,U+201E,U+201F"/>
|
||||
<Rule Left="0.75" Right="0" Unit="7" Characters="U+2035"/>
|
||||
<Rule Left="0.75" Right="0.75" Unit="7" Characters="U+0027,U+002A,U+0060,U+007E,U+00B4,U+2018,U+2019,U+201A,U+201B,U+2039,U+203A"/>
|
||||
</Rules>
|
||||
</Set>
|
||||
</OpticalMarginSets>
|
||||
<PageSets>
|
||||
<Set Name="Single Page" FirstPage="0" Rows="1" Columns="1"/>
|
||||
<Set Name="Facing Pages" FirstPage="1" Rows="1" Columns="2">
|
||||
<PageNames Name="Left Page"/>
|
||||
<PageNames Name="Right Page"/>
|
||||
</Set>
|
||||
<Set Name="3-Fold" FirstPage="0" Rows="1" Columns="3">
|
||||
<PageNames Name="Left Page"/>
|
||||
<PageNames Name="Middle"/>
|
||||
<PageNames Name="Right Page"/>
|
||||
</Set>
|
||||
<Set Name="4-Fold" FirstPage="0" Rows="1" Columns="4">
|
||||
<PageNames Name="Left Page"/>
|
||||
<PageNames Name="Middle Left"/>
|
||||
<PageNames Name="Middle Right"/>
|
||||
<PageNames Name="Right Page"/>
|
||||
</Set>
|
||||
</PageSets>
|
||||
<Sections>
|
||||
<Section Number="0" Name="Section 1" From="0" To="3" Type="Type_1_2_3" Start="1" Reversed="0" Active="1" FillChar="0" FieldWidth="0"/>
|
||||
</Sections>
|
||||
<MasterPage PageXPosition="100.001" PageYPosition="20.001" PageWidth="595.275590551181" PageHeight="841.889763779528" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" PageNumber="0" PageName="Normal" MasterPageName="" Size="IsoA_A04" Orientation="0" LeftPage="0" Preset="0" VerticalGuides="" HorizontalGuides="" AutoGuideHorizontalGap="0" AutoGuideVerticalGap="0" AutoGuideHorizontalCount="0" AutoGuideVerticalCount="0" AutoGuideHorizontalReference="0" AutoGuideVerticalReference="0" AutoGuideSelection="0 0 0 0" PageEffectDuration="1" PageViewDuration="1" PageEffectType="0" PageEffectLineDirection="0" PageEffectInsideOutside="0" PageEffectDirection="0"/>
|
||||
<Page PageXPosition="100.001" PageYPosition="20.001" PageWidth="595.275590551181" PageHeight="841.889763779528" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" PageNumber="0" PageName="" MasterPageName="Normal" Size="IsoA_A04" Orientation="0" LeftPage="0" Preset="0" VerticalGuides="" HorizontalGuides="" AutoGuideHorizontalGap="0" AutoGuideVerticalGap="0" AutoGuideHorizontalCount="0" AutoGuideVerticalCount="0" AutoGuideHorizontalReference="0" AutoGuideVerticalReference="0" AutoGuideSelection="0 0 0 0" PageEffectDuration="1" PageViewDuration="1" PageEffectType="0" PageEffectLineDirection="0" PageEffectInsideOutside="0" PageEffectDirection="0"/>
|
||||
<Page PageXPosition="100.001" PageYPosition="901.890763779528" PageWidth="595.275590551181" PageHeight="841.889763779528" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" PageNumber="1" PageName="" MasterPageName="Normal" Size="IsoA_A04" Orientation="0" LeftPage="0" Preset="0" VerticalGuides="" HorizontalGuides="" AutoGuideHorizontalGap="0" AutoGuideVerticalGap="0" AutoGuideHorizontalCount="0" AutoGuideVerticalCount="0" AutoGuideHorizontalReference="0" AutoGuideVerticalReference="0" AutoGuideSelection="0 0 0 0" PageEffectDuration="1" PageViewDuration="1" PageEffectType="0" PageEffectLineDirection="0" PageEffectInsideOutside="0" PageEffectDirection="0"/>
|
||||
<Page PageXPosition="100.001" PageYPosition="1783.78052755906" PageWidth="595.275590551181" PageHeight="841.889763779528" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" PageNumber="2" PageName="" MasterPageName="Normal" Size="IsoA_A04" Orientation="0" LeftPage="0" Preset="0" VerticalGuides="" HorizontalGuides="" AutoGuideHorizontalGap="0" AutoGuideVerticalGap="0" AutoGuideHorizontalCount="0" AutoGuideVerticalCount="0" AutoGuideHorizontalReference="0" AutoGuideVerticalReference="0" AutoGuideSelection="0 0 0 0" PageEffectDuration="1" PageViewDuration="1" PageEffectType="0" PageEffectLineDirection="0" PageEffectInsideOutside="0" PageEffectDirection="0"/>
|
||||
<Page PageXPosition="100.001" PageYPosition="2665.67029133858" PageWidth="595.275590551181" PageHeight="841.889763779528" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" PageNumber="3" PageName="" MasterPageName="Normal" Size="IsoA_A04" Orientation="0" LeftPage="0" Preset="0" VerticalGuides="" HorizontalGuides="" AutoGuideHorizontalGap="0" AutoGuideVerticalGap="0" AutoGuideHorizontalCount="0" AutoGuideVerticalCount="0" AutoGuideHorizontalReference="0" AutoGuideVerticalReference="0" AutoGuideSelection="0 0 0 0" PageEffectDuration="1" PageViewDuration="1" PageEffectType="0" PageEffectLineDirection="0" PageEffectInsideOutside="0" PageEffectDirection="0"/>
|
||||
<PageObject XPosition="145.355330708661" YPosition="63.2903225806452" OwnPage="0" ItemID="2136852494" ItemType="2" Width="505.47968503937" Height="161" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="0.22524" ImageScaleY="0.22524" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" ImagePageNumber="0" ImageFileName="assets/nerdletter-banner-d-cropped-scaled.jpg" ImageProfile="Embedded GIMP built-in sRGB" ImageColorimetricIntent="0" EmbeddedProfile="Embedded GIMP built-in sRGB" Path="M0 0 L505.48 0 L505.48 161 L0 161 L0 0 Z" ContourLinePath="M0 0 L505.48 0 L505.48 161 L0 161 L0 0 Z" gXpos="145.355330708661" gYpos="63.2903225806452" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1"/>
|
||||
<PageObject XPosition="145.355330708661" YPosition="230.41935483871" OwnPage="0" ItemID="1727028313" ItemType="4" Width="278.515637033274" Height="156.870967741935" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L278.516 0 L278.516 156.871 L0 156.871 L0 0 Z" ContourLinePath="M0 0 L278.516 0 L278.516 156.871 L0 156.871 L0 0 Z" gXpos="145.355330708661" gYpos="230.41935483871" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Chars="TABLE OF CONTENTS"/>
|
||||
<para Parent="IBM CGA TITLE"/>
|
||||
<para/>
|
||||
<Content Chars=" Editorial.............. Page 1"/>
|
||||
<para Parent="Table Of Contents"/>
|
||||
<Content Chars=" Community Commentary... Page 2"/>
|
||||
<para Parent="Table Of Contents"/>
|
||||
<Content Chars=" News Bulletins......... Page 4"/>
|
||||
<para Parent="Table Of Contents"/>
|
||||
<Content Chars=" The Interview.......... Page 6"/>
|
||||
<para Parent="Table Of Contents"/>
|
||||
<Content Chars=" Forth On Atari......... Page 13 "/>
|
||||
<para Parent="Table Of Contents"/>
|
||||
<Content Chars=" Guest Essay Section.... Page 20"/>
|
||||
<para Parent="Table Of Contents"/>
|
||||
<Content Chars=" Code Listings.......... Page 27"/>
|
||||
<para Parent="Table Of Contents"/>
|
||||
<Content Chars=" Closing Thoughts....... Page 30"/>
|
||||
<trail Parent="Table Of Contents"/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="427.563516129032" YPosition="230.595774193548" OwnPage="0" ItemID="714549565" ItemType="2" Width="222.967741935484" Height="156.193548387097" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="0.527110501029513" ImageScaleY="0.527110501029513" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="0" ImageRatio="1" ImagePageNumber="0" ImageFileName="assets/tiny-atari-ad-cropped-reresed.jpg" ImageProfile="Embedded GIMP built-in D65 Grayscale with sRGB TRC" ImageColorimetricIntent="0" EmbeddedProfile="Embedded GIMP built-in D65 Grayscale with sRGB TRC" Path="M0 0 L222.968 0 L222.968 156.194 L0 156.194 L0 0 Z" ContourLinePath="M0 0 L222.968 0 L222.968 156.194 L0 156.194 L0 0 Z" gXpos="427.563516129032" gYpos="230.595774193548" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1"/>
|
||||
<PageObject XPosition="148.903225806452" YPosition="420.096774193548" OwnPage="0" ItemID="616858846" ItemType="2" Width="500.516129032258" Height="233.518399034798" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="0.3943" ImageScaleY="0.3943" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" ImagePageNumber="0" ImageFileName="../../Pictures/Rumble-Shows/old-man-stares-at-computer.jpg" ImageColorimetricIntent="0" UseEmbeddedProfile="0" Path="M0 0 L500.516 0 L500.516 233.518 L0 233.518 L0 0 Z" ContourLinePath="M0 0 L500.516 0 L500.516 233.518 L0 233.518 L0 0 Z" gXpos="148.903225806452" gYpos="420.096774193548" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1"/>
|
||||
<PageObject XPosition="148.645161290323" YPosition="396" OwnPage="0" ItemID="558364662" ItemType="4" Width="501.277098552197" Height="18.016748031496" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L501.277 0 L501.277 18.0167 L0 18.0167 L0 0 Z" ContourLinePath="M0 0 L501.277 0 L501.277 18.0167 L0 18.0167 L0 0 Z" gXpos="148.645161290323" gYpos="396" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Chars="Community Art"/>
|
||||
<trail Parent="IBM CGA TITLE" Alignment="1"/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="148.806451612903" YPosition="691.612903225806" OwnPage="0" ItemID="214927544" ItemType="4" Width="308.903225806452" Height="18.0258920497841" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L308.903 0 L308.903 18.0259 L0 18.0259 L0 0 Z" ContourLinePath="M0 0 L308.903 0 L308.903 18.0259 L0 18.0259 L0 0 Z" gXpos="148.806451612903" gYpos="691.612903225806" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content CParent="IBM CGA" Chars="This Issue's Contributors"/>
|
||||
<trail/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="148.806451612903" YPosition="713.677419354839" OwnPage="0" ItemID="934940828" ItemType="2" Width="29.0322580645161" Height="31.3548387096774" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="0.226814516129032" ImageScaleY="0.226814516129032" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="0" ImageRatio="1" ImagePageNumber="0" ImageFileName="../../Pictures/Pixelart/socrates-128x128.png" ImageProfile="Embedded sRGB built-in" ImageColorimetricIntent="0" EmbeddedProfile="Embedded sRGB built-in" Path="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" ContourLinePath="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" gXpos="148.806451612903" gYpos="713.677419354839" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1"/>
|
||||
<PageObject XPosition="181.903225806452" YPosition="715.308086614173" OwnPage="0" ItemID="436911840" ItemType="4" Width="158.516129032258" Height="27.9822359664719" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L158.516 0 L158.516 27.9822 L0 27.9822 L0 0 Z" ContourLinePath="M0 0 L158.516 0 L158.516 27.9822 L0 27.9822 L0 0 Z" gXpos="181.903225806452" gYpos="715.308086614173" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content CParent="IBM CGA" FontSize="7" Chars="Socrates - Interview (Page 6)"/>
|
||||
<trail Parent="Default Paragraph Style" LineSpacing="12"/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="363.806451612903" YPosition="714.677419354839" OwnPage="0" ItemID="232820377" ItemType="2" Width="29.0322580645161" Height="31.3548387096774" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="0.119674956907166" ImageScaleY="0.119674956907166" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="0" ImageRatio="1" ImagePageNumber="0" ImageFileName="../../Pictures/Pixelart/tiny-face3.png" ImageProfile="Embedded GIMP built-in sRGB" ImageColorimetricIntent="0" EmbeddedProfile="Embedded GIMP built-in sRGB" Path="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" ContourLinePath="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" gXpos="363.806451612903" gYpos="714.677419354839" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1"/>
|
||||
<PageObject XPosition="399.903225806451" YPosition="715.308086614173" OwnPage="0" ItemID="2081169240" ItemType="4" Width="191.58064516129" Height="26.8209456438915" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L191.581 0 L191.581 26.8209 L0 26.8209 L0 0 Z" ContourLinePath="M0 0 L191.581 0 L191.581 26.8209 L0 26.8209 L0 0 Z" gXpos="399.903225806452" gYpos="715.308086614173" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content CParent="IBM CGA" FontSize="7" Chars="Rufus - DIY Project 1"/>
|
||||
<para Parent="Default Paragraph Style" LineSpacing="12"/>
|
||||
<Content CParent="IBM CGA" FontSize="7" Chars="(page 13)"/>
|
||||
<trail/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="145.355330708661" YPosition="806.516129032258" OwnPage="0" ItemID="2093136538" ItemType="4" Width="507.870475742951" Height="12.8549497078993" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L507.87 0 L507.87 12.8549 L0 12.8549 L0 0 Z" ContourLinePath="M0 0 L507.87 0 L507.87 12.8549 L0 12.8549 L0 0 Z" gXpos="145.355330708661" gYpos="806.516129032258" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Font="Px ATI 8x8-2y Regular" Chars="The Nerdletter @ 2026 Volume 1 Issue 1"/>
|
||||
<trail Alignment="1"/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="151.032258064516" YPosition="760.193548387097" OwnPage="0" ItemID="453955206" ItemType="2" Width="29.0322580645161" Height="31.3548387096774" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="0.226814516129032" ImageScaleY="0.226814516129032" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="0" ImageRatio="1" ImagePageNumber="0" ImageFileName="../../Pictures/Pixelart/socrates-128x128.png" ImageProfile="Embedded sRGB built-in" ImageColorimetricIntent="0" EmbeddedProfile="Embedded sRGB built-in" Path="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" ContourLinePath="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" gXpos="37.806451612903" gYpos="709.677419354839" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1"/>
|
||||
<PageObject XPosition="184.129032258064" YPosition="761.824215646431" OwnPage="0" ItemID="2132111992" ItemType="4" Width="158.516129032258" Height="27.9822359664719" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L158.516 0 L158.516 27.9822 L0 27.9822 L0 0 Z" ContourLinePath="M0 0 L158.516 0 L158.516 27.9822 L0 27.9822 L0 0 Z" gXpos="70.903225806452" gYpos="711.308086614173" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content CParent="IBM CGA" FontSize="7" Chars="Socrates - Guest Essay (Page 20)"/>
|
||||
<trail Parent="Default Paragraph Style" LineSpacing="12"/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="364.032258064516" YPosition="758.193548387097" OwnPage="0" ItemID="1680863037" ItemType="2" Width="29.0322580645161" Height="31.3548387096774" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="0.119674956907166" ImageScaleY="0.119674956907166" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="0" ImageRatio="1" ImagePageNumber="0" ImageFileName="../../Pictures/Pixelart/tiny-face3.png" ImageProfile="Embedded GIMP built-in sRGB" ImageColorimetricIntent="0" EmbeddedProfile="Embedded GIMP built-in sRGB" Path="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" ContourLinePath="M0 0 L29.0323 0 L29.0323 31.3548 L0 31.3548 L0 0 Z" gXpos="250.806451612903" gYpos="707.677419354839" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1"/>
|
||||
<PageObject XPosition="402.129032258064" YPosition="757.824215646431" OwnPage="0" ItemID="420756713" ItemType="4" Width="191.58064516129" Height="26.8209456438915" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L191.581 0 L191.581 26.8209 L0 26.8209 L0 0 Z" ContourLinePath="M0 0 L191.581 0 L191.581 26.8209 L0 26.8209 L0 0 Z" gXpos="288.903225806452" gYpos="707.308086614173" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content CParent="IBM CGA" FontSize="7" Chars="Billy - DIY Project 2 "/>
|
||||
<para Parent="Default Paragraph Style" LineSpacing="12"/>
|
||||
<Content CParent="IBM CGA" FontSize="7" Chars="(page 15)"/>
|
||||
<trail/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="145.355330708662" YPosition="656.516129032258" OwnPage="0" ItemID="1418476029" ItemType="4" Width="507.870475742951" Height="12.8549497078993" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L507.87 0 L507.87 12.8549 L0 12.8549 L0 0 Z" ContourLinePath="M0 0 L507.87 0 L507.87 12.8549 L0 12.8549 L0 0 Z" gXpos="145.355330708661" gYpos="656.516129032258" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Font="Px ATI 8x8-2y Regular" Chars="Old Computer Nerd - By Rufus Magillacuddy"/>
|
||||
<trail Alignment="1"/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="148.189976377953" YPosition="947.612903225806" OwnPage="1" ItemID="1323048606" ItemType="4" Width="501.732283464567" Height="686.709677419355" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L501.732 0 L501.732 686.71 L0 686.71 L0 0 Z" ContourLinePath="M0 0 L501.732 0 L501.732 686.71 L0 686.71 L0 0 Z" gXpos="148.189976377953" gYpos="947.612903225806" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Chars="(Antic Magazine - Volume 1, No. 2 / June 1982)"/>
|
||||
<para Parent="Default Paragraph Style"/>
|
||||
<para Parent="Default Paragraph Style"/>
|
||||
<Content Chars="FORTH FACTORY"/>
|
||||
<para Parent="IBM CGA TITLE"/>
|
||||
<para/>
|
||||
<Content Chars="Utilities"/>
|
||||
<para/>
|
||||
<Content Chars="by Bob Gonsalves"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="In this installment we'll present some utility definitions that you may easily add to your system. The first set of words can be used in many Forth systems, the second set are designed to access the Atari disk file management system."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="SOME QUICKIES"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Screen 30 shows some useful extensions to fig-Forth systems. Following /, all characters on a line will be ignored; the text following the / is used for commenting. NOT is used to reverse the logical state of the top stack item and is often used before conditional testing words, such as IF, UNTIL."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Another group of words facilitates operations on bytes in 16-bit word. LSBYTE will leave the least significant byte of the top stack value, while MSBYTE leaves the most significant byte. >< uses these two operations to reverse the two halves of a 16-bit stack value."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Our final category introduces a new data type. The 'TO' type variable, introduced by Paul Bartholdi in Forth Dimensions, improves readability and reliability of Forth programs by reducing the number of @ (fetch) and ! (store) operations that must be included in the source text. If the VAR defined variable is preceded by TO, a stack parameter will be stored in the variable. Otherwise, the variable simply leaves its contents. The following should illustrate:"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="0 VAR temp.cell / our specific instance"/>
|
||||
<para/>
|
||||
<Content Chars="20 TO temp.cell / store 20 in the variable"/>
|
||||
<para/>
|
||||
<Content Chars="temp.cell . 20/ prints the contents of temp.cell"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="FMS 'n' FIELDS"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="With extensions such as these, we're now ready to suggest some ways of accessing FMS formatted files. As shown in figure 1, both the FMS directory entries and the individual sectors of a FMS file share a similar structure. They both feature range of disk space, with certain bytes or 16-bit words having specific significance. In the case of a directory entry, locations are used to store the state of the file (open, closed, etc), its length and starting sector, plus the characters that make up its name. These locations are offset from an address DIR.ADDR, which contains the address, within the disk buffers, of the start of the directory entry. The defining word FIELDER will create some words that allow us to access these fields. These access words are structured like the TO variables mentioned above. Thus, START.SECTOR for example, will normally leave the starting sector number of a file on the stack. If it is preceded by TO, however, as in:"/>
|
||||
<para/>
|
||||
<para/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="144.322580645161" YPosition="1856.96774193548" OwnPage="2" ItemID="1700703502" ItemType="4" Width="498.58064516129" Height="716.903225806451" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L498.581 0 L498.581 716.903 L0 716.903 L0 0 Z" ContourLinePath="M0 0 L498.581 0 L498.581 716.903 L0 716.903 L0 0 Z" gXpos="144.322580645161" gYpos="1856.96774193548" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Chars="3 TO START.SECTOR"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="then a value is stored to the START.SECTOR field. (This doesn't work as well for FLAG.BYTE, which is only a single byte location.)"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Three additional words on screen 32 show ways to make use of the data from these fields. ?NULLED examines the least significant byte of the FLAG.BYTE of a directory entry, and leaves a true flag on the stack if the directory entry is not an active one. PNAME will print the name of an entry. BUMPSEC will print out the number of sectors used by an individual file, and increments a counter containing the number of sectors used on the disk."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Our DIR example makes use of all of the above definitions to print out the directory of a FMS disk. It does so by examining sectors 361 through 368 for valid directory entries. Each entry is 16 bytes long (8 per sector) and is checked to see if it is null. If it isn't, its name is printed and the file length is added to the running total (#SEC). At the end of the directory listing, the total number of sectors used by the files is printed, as well as the number of sectors available (according to the FMS Volume Table of Contents), using .USED."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="In the case of an actual data sector from a file, the words FILE, POINTER and BCOUNT (all defined by DATA) return the values stored at the end of a data sector. Because of various tricks that are performed (to save disk space) additional words are required to convert the values into a useable format. The word #FILE returns the position of the file in the directory. The next sector number in the file is returned by #POINT, which equals 0 if this sector is the end of the file. #BYTES returns the number of data bytes in the sector, which may range from 125 to 1."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Two other words are useful in this context. DATA.FIELD leaves the address, in the disk buffers, of the start of the sector. ?LAST leaves a false flag, plus the next sector number of the file, if the end of the file has not been reached. Otherwise a true flag is left on the stack."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Our final example, on screen 36, illustrates what it might take to list a file. Assuming that the value of DIR.ADDR has been set to point to the directory entry in the disk buffers, PRINT.FILE starts at the first sector of the file, and types #BYTES from the DATA.FIELD of the sector, until the last sector is reached."/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="FOR MORE INFO"/>
|
||||
<para/>
|
||||
<para/>
|
||||
<Content Chars="Because of space limitations, we'll skip over exactly how one locates a specific directory entry. This could be done by simply DUMPing the contents of a disk block, or by actually accepting text from a user and performing a string match against the FMS directory. Other applications for this system, such as loading character fonts into memory and repairing 'damaged' files, can be obtained by writing to the author c/o Pink Noise Studios, P.0. Box 785 Crockett, CA 94525. Please include a self-addressed, stamped envelope."/>
|
||||
<para/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="148.645161290323" YPosition="2711.22580645161" OwnPage="3" ItemID="2147217367" ItemType="4" Width="250.064516129032" Height="750.193548387097" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L250.065 0 L250.065 750.194 L0 750.194 L0 0 Z" ContourLinePath="M0 0 L250.065 0 L250.065 750.194 L0 750.194 L0 0 Z" gXpos="148.645161290323" gYpos="2711.22580645161" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="pink noise studios/fig-forth 1/82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ 30 extensions for others rfg20apr82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": \ in @ c/l / 1+ c/l * in ! ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" immediate \ from Henry Laxen"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": NOT 0= ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" hex"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": MSBYTE 0 100 u/ swap drop ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": LSBYTE ff and ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": >< \ byteswap"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" dup lsbyte 100 * swap msbyte + ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="0 variable TOFLAG"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": TO 1 toflag ! ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": VAR <builds ,"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" does> toflag @"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" if ! else @ then 0 toflag ! ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="decimal ;s"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ 31 fields in directory rfg18apr82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="0 variable DIR.ADDR"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ points to directory entry in buffers"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": FIELDER <builds c, \ offset into field"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" does> c@ dir.addr @ + \ compute addr"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" toflag @ if ! else @ then 0 toflag ! ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="0 fielder FLAG.BYTE"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="1 fielder SECTOR.COUNT"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="3 fielder START.SECTOR"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": NAME.FIELD dir.addr @ 5 + ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=";s"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ 32 utilities for DIR rfg18apr82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": ?NULLED \ return true if nulled out"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" flag.byte lsbyte dup 80 ="/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" swap 0= or sector.count 0= or ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" hex"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": PNAME"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" name.field dup 8 type 2e emit"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" 8 + 3 type ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="0 variable #SEC"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": BUMPSEC \ increment total and print"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" sector.count dup #sec +! 4 .r ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" decimal"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": .USED \ according to VTOC"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" 359 block 3 + @ 4 .r"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" ," sectors available " cr ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=";s"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="pink noise studios/fig-forth 1/82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ 33 directory of FMS disks rfg18apr82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" decimal"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": DIR 0 #sec ! cr"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" 368 360 \ directory sectors"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" do i block dup b/buf + swap"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" do i dir.addr !"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" ?nulled not"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" if pname bumpsec cr then"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" 16 +loop"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" loop cr #sec @ 4 .r"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" ." sectors used by files " cr .used ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=";s"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ 34 fields in sectors rfg18apr82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" decimal"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" 0 variable SECTOR"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": DATA <builds c,"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" does> c@ sector @ 1- block +"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="toflag @"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" if ! else @ then 0 toflag ! ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="125 data FILE"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="125 data POINTER"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="127 data BCOUNT"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" hex"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ below return values"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": #FILE file lsbyte 4 / ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": #POINT pointer >< 3ff and ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": #BYTES bcount 7f and 7d min ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\above accounts for short sectors"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=";s"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ 35 dos access utilities rfg18apr82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": DATA.FIELD \ first storage location"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" sector @ 1- block ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": ?LAST #point -dup 0= ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ leave true or false + link"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ to next sector"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" "/>
|
||||
<trail/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
<PageObject XPosition="404.903225806452" YPosition="2712" OwnPage="3" ItemID="1099928068" ItemType="4" Width="246.193548387097" Height="749.419354838709" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L246.194 0 L246.194 749.419 L0 749.419 L0 0 Z" ContourLinePath="M0 0 L246.194 0 L246.194 749.419 L0 749.419 L0 0 Z" gXpos="404.903225806452" gYpos="2712" gWidth="0" gHeight="0" Layer="0" NextItem="-1" BackItem="-1">
|
||||
<StoryText>
|
||||
<DefaultStyle/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" pink noise studios/fig-forth 1/82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ 36 printing a file rfg18apr82"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ assumes dir.addr points to"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="\ directory entry in buffers"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=": PRINT.FILE"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" start.sector sector !"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" begin data.field #bytes type"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" ?last not"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" while sector !"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars=" repeat ;"/>
|
||||
<para/>
|
||||
<Content Font="Px Wyse700a-2y Regular" FontSize="12" Chars="----------------------------------------"/>
|
||||
<trail/>
|
||||
</StoryText>
|
||||
</PageObject>
|
||||
</Document>
|
||||
</SCRIBUSUTF8NEW>
|
||||
0
print/README.md
Normal file
25
print/assets/banner2printer.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# banner-to-dotmatrix.sh - Convert image to LQ-350 full-width ESC/P2 raster
|
||||
|
||||
INPUT_FILE="${1}"
|
||||
OUTPUT_BIN="${INPUT_FILE%.*}-lq350.bin"
|
||||
|
||||
if [ -z "${INPUT_FILE}" ]; then
|
||||
echo "Usage: ${0} input.jpg"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ${INPUT_FILE}
|
||||
echo ${OUTPUT_BIN}
|
||||
|
||||
convert ${INPUT_FILE} -resize 2650x -density 360x180 -monochrome -dither FloydSteinberg -compress none \
|
||||
pbm:- | pbmtoescp2 -resolution=360 > "$OUTPUT_BIN"
|
||||
|
||||
# Optional: prepend ESC/P2 reset
|
||||
printf '\x1B\x40' > init.bin
|
||||
cat init.bin "$OUTPUT_BIN" > print-ready.bin
|
||||
|
||||
lp -d EPSON_LQ-350 -o raw print-ready.bin
|
||||
|
||||
# Clean up temp files (uncomment if desired)
|
||||
# rm init.bin print-ready.bin
|
||||
1
print/assets/init.bin
Normal file
@ -0,0 +1 @@
|
||||
@
|
||||
BIN
print/assets/nerdletter-badge-a.jpg
Normal file
|
After Width: | Height: | Size: 162 KiB |
BIN
print/assets/nerdletter-badge-b.jpg
Normal file
|
After Width: | Height: | Size: 187 KiB |
BIN
print/assets/nerdletter-badge-c.jpg
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
print/assets/nerdletter-badge-sprockets1.jpg
Normal file
|
After Width: | Height: | Size: 235 KiB |
BIN
print/assets/nerdletter-badge-sprockets2.jpg
Normal file
|
After Width: | Height: | Size: 157 KiB |
BIN
print/assets/nerdletter-badge-sprockets3.jpg
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
print/assets/nerdletter-badge.jpg
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
print/assets/nerdletter-banner-a.jpg
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
print/assets/nerdletter-banner-alternative.jpg
Normal file
|
After Width: | Height: | Size: 194 KiB |
BIN
print/assets/nerdletter-banner-alternative2-cropped.jpg
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
print/assets/nerdletter-banner-alternative2.jpg
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
print/assets/nerdletter-banner-b-lq350.bin
Normal file
BIN
print/assets/nerdletter-banner-b.jpg
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
print/assets/nerdletter-banner-c-lq350.bin
Normal file
BIN
print/assets/nerdletter-banner-c.jpg
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
print/assets/nerdletter-banner-d-cropped-scaled-cleaned.jpg
Normal file
|
After Width: | Height: | Size: 334 KiB |
BIN
print/assets/nerdletter-banner-d-cropped-scaled.jpg
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
print/assets/nerdletter-banner-lq350.bin
Normal file
BIN
print/assets/nerdletter-banner-sprockets1-lq350.bin
Normal file
BIN
print/assets/nerdletter-banner-sprockets1.jpg
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
print/assets/nerdletter-banner-sprockets2-lq350.bin
Normal file
BIN
print/assets/nerdletter-banner-sprockets2.jpg
Normal file
|
After Width: | Height: | Size: 194 KiB |
BIN
print/assets/nerdletter-banner.jpg
Normal file
|
After Width: | Height: | Size: 151 KiB |
BIN
print/assets/nerdletter-strip1.jpg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
print/assets/nerdletter-strip2.jpg
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
print/assets/nerdletter.jpeg
Normal file
|
After Width: | Height: | Size: 386 KiB |
BIN
print/assets/print-ready.bin
Normal file
BIN
print/assets/tiny-atari-ad-cropped-reresed.jpg
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
print/assets/tiny-atari-ad-cropped.jpg
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
print/assets/tiny-atari-ad-cropped.png
Normal file
|
After Width: | Height: | Size: 285 KiB |
BIN
print/assets/tiny-atari-ad.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
15
print/content-plan.md
Normal file
@ -0,0 +1,15 @@
|
||||
- **Cover:** Banner, logo, table of contents, contributors (with thumbnails), and one piece of black-and-white printable art as a hero image. That art **should come from one of this community’s members**. But if it doesn’t, I’ll just have Grok give me something. So, if you don’t want slop, then pony-up. Yes, I’m extorting you. “*Sure would be a cryin’ shame to see the art section filled up with AI slop, now, wouldn’t it?*”
|
||||
|
||||
- **Page 1:** And editorial essay from me, on some tech topic with socio-political import. Some magazines use the editorial letter to intentionally drive the theme of the whole issue. Nerdletter doesn’t publish frequently enough for “themed” issues. So, this will be arbitrary and free-wheeling. But it won’t be interminable. I’ll be limiting it to around 400-500 words.
|
||||
|
||||
- **The “Community Commentary” Pages**: This will be the newsletter’s version of “Letters to the Editor”. Short missives about anything found in the issue. For the first issue, I’ll randomly select content from the message board here, to fill it out. It will be 2 pages, and include retro mini-ads.
|
||||
|
||||
- **The “Bulletin” Pages**: This will be 2 pages of yesterday’s news tomorrow. A news report or press release retrieved from the world of computing tech, in the era between 1975 and 1995. This will also include one full-page ad (or ad collage) from that era. (.cc [@JohnBlood](https://forum.lunduke.com/u/johnblood) )
|
||||
|
||||
- **The “Interview” Section**: this could be either an archival interview reprinted from defunct old magazines (again .cc [@JohnBlood](https://forum.lunduke.com/u/johnblood)), OR it could be a genuinely modern interview with an actual retro-tech person (e.g. ESR or Bob Martin or whoever might still be alive). The suggested length is around 3,000 words (roughly 6 pages). My instinct is to limit this to one interview per issue.
|
||||
|
||||
- **The “DIY” Section**: This should be a single community contribution, and it should be on any project at all that is either focused on a piece of retro tech, OR hybridises retro and modern tech. So, for example, a Borland C project written using DOSBOX is acceptable, an FPGA emulation of an old hardware platform (e.g. the Ultimate C64) is also acceptable. And, as I’ve mentioned before, peripherals too, like the Fujinet. But I’m sure there are forms of hybridisation I haven’t even thought of. So, bring it on! I’m also limiting this section to 3,000 words or roughly 6 pages (without pictures). If your project includes images, it’ll all basically still have to fit on 6 pages.
|
||||
|
||||
- **The “Guest Essay” Section**: This section will be a contribution from a notable individual, or a notable work from a community member. So, for example, if [@lunduke](https://forum.lunduke.com/u/lunduke) decided he wanted to contribute a reminiscence of his early computer experiences, it would go here. Or, for example, if a community member wrote a piece of quality short fiction, it could go here. There is no limit to length here, even though the page limit is 6 (3,000 words). If your piece extends beyond the limit, I will serialise it, but no more than two parts. If there are no contributions for a given issue, then I’ll harvest one of John C. Dvorak’s old essays from the PC Magazine archive and put it here.
|
||||
|
||||
- **The “Closing Thought” Page**: This, again, will be 400-500 words from me. This time, mostly just pitching the next issue.
|
||||
BIN
print/content/archival/Antic_Vol_4_No_5.pdf
Normal file
3733
print/content/archival/Antic_Vol_4_No_5_hocr_searchtext.txt
Normal file
BIN
print/content/archival/Antic_Vol_4_No_5_hocr_searchtext.txt.gz
Normal file
458
print/content/archival/Atari-Forth Factory-Utilities.html
Normal file
@ -0,0 +1,458 @@
|
||||
|
||||
<!-- saved from url=(0052)https://www.atarimagazines.com/v1n2/forthfactory.php -->
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Forth Factory: Utilities</title>
|
||||
<meta name="Author" content="Bob Gonsalves">
|
||||
<meta name="description" content="Forth Factory: Utilities. From Antic Vol. 1, No. 2 / June 1982">
|
||||
</head>
|
||||
|
||||
<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#800080" alink="#FF0000"><pre><a href="https://www.atarimagazines.com/antic/"><img src="./Atari-Forth Factory-Utilities_files/antic.gif" height="46" width="152" alt="Classic Computer Magazine Archive" align="center" border="0"></a> ANTIC VOL. 1, NO. 2 / JUNE 1982</pre><hr>
|
||||
|
||||
|
||||
<div name="topadholder" id="topadholder" style="display: block; min-width:800px; text-align:left;padding:25px 10px 10px 20px;line-height:9.5pt;clear:both;"></div>
|
||||
<table style="zoom:1; min-width:800px; border-width: 1px; border-spacing: 2px; border-style: dotted; border-color: gray; border-collapse: separate;">
|
||||
<tbody><tr><td style="vertical-align:top; zoom:1; min-width:400px;">
|
||||
<div id="main_article" name="main_article" style="zoom: 1; min-width:400px;">
|
||||
<div id="spacer" style="width:400px;"></div>
|
||||
|
||||
<h2>FORTH FACTORY</h2>
|
||||
|
||||
<h1>Utilities</h1>
|
||||
|
||||
<p><i>by Bob Gonsalves</i></p>
|
||||
|
||||
<p>In this installment we'll present some utility definitions that you may
|
||||
easily add to your system. The first set of words can be used in many Forth
|
||||
systems, the second set are designed to access the Atari disk file management
|
||||
system. </p>
|
||||
|
||||
<p><b>SOME QUICKIES</b></p>
|
||||
|
||||
<p>Screen 30 shows some useful extensions to fig-Forth systems. Following
|
||||
/, all characters on a line will be ignored; the text following the / is
|
||||
used for commenting. NOT is used to reverse the logical state of the top
|
||||
stack item and is often used before conditional testing words, such as IF,
|
||||
UNTIL.</p>
|
||||
|
||||
<p>Another group of words facilitates operations on bytes in 16-bit word.
|
||||
LSBYTE will leave the least significant byte of the top stack value, while
|
||||
MSBYTE leaves the most significant byte. >< uses these two operations
|
||||
to reverse the two halves of a 16-bit stack value.</p>
|
||||
|
||||
<p>Our final category introduces a new data type. The 'TO' type variable,
|
||||
introduced by Paul Bartholdi in Forth Dimensions, improves readability and
|
||||
reliability of Forth programs by reducing the number of @ (fetch) and !
|
||||
(store) operations that must be included in the source text. If the VAR
|
||||
defined variable is preceded by TO, a stack parameter will be stored in
|
||||
the variable. Otherwise, the variable simply leaves its contents. The following
|
||||
should illustrate:</p>
|
||||
|
||||
<p><tt>0 VAR temp.cell / our specific instance<br>
|
||||
20 TO temp.cell / store 20 in the variable <br>
|
||||
temp.cell . 20/ prints the contents of temp.cell</tt></p>
|
||||
|
||||
<p><b>FMS 'n' FIELDS</b></p>
|
||||
|
||||
<p>With extensions such as these, we're now ready to suggest some ways of
|
||||
accessing FMS formatted files. As shown in figure 1, both the FMS directory
|
||||
entries and the individual sectors of a FMS file share a similar structure.
|
||||
They both feature range of disk space, with certain bytes or 16-bit words
|
||||
having specific significance. In the case of a directory entry, locations
|
||||
are used to store the state of the file (open, closed, etc), its length
|
||||
and starting sector, plus the characters that make up its name. These locations
|
||||
are offset from an address DIR.ADDR, which contains the address, within
|
||||
the disk buffers, of the start of the directory entry. The defining word
|
||||
FIELDER will create some words that allow us to access these fields. These
|
||||
access words are structured like the TO variables mentioned above. Thus,
|
||||
START.SECTOR for example, will normally leave the starting sector number
|
||||
of a file on the stack. If it is preceded by TO, however, as in:</p>
|
||||
|
||||
<p><tt>3 TO START.SECTOR</tt></p>
|
||||
|
||||
<p>then a value is stored to the START.SECTOR field. (This doesn't work
|
||||
as well for FLAG.BYTE, which is only a single byte location.)</p>
|
||||
|
||||
<p>Three additional words on screen 32 show ways to make use of the data
|
||||
from these fields. ?NULLED examines the least significant byte of the FLAG.BYTE
|
||||
of a directory entry, and leaves a true flag on the stack if the directory
|
||||
entry is not an active one. PNAME will print the name of an entry. BUMPSEC
|
||||
will print out the number of sectors used by an individual file, and increments
|
||||
a counter containing the number of sectors used on the disk.</p>
|
||||
|
||||
<p>Our DIR example makes use of all of the above definitions to print out
|
||||
the directory of a FMS disk. It does so by examining sectors 361 through
|
||||
368 for valid directory entries. Each entry is 16 bytes long (8 per sector)
|
||||
and is checked to see if it is null. If it isn't, its name is printed and
|
||||
the file length is added to the running total (#SEC). At the end of the
|
||||
directory listing, the total number of sectors used by the files is printed,
|
||||
as well as the number of sectors available (according to the FMS Volume
|
||||
Table of Contents), using .USED.</p>
|
||||
|
||||
<p>In the case of an actual data sector from a file, the words FILE, POINTER
|
||||
and BCOUNT (all defined by DATA) return the values stored at the end of
|
||||
a data sector. Because of various tricks that are performed (to save disk
|
||||
space) additional words are required to convert the values into a useable
|
||||
format. The word #FILE returns the position of the file in the directory.
|
||||
The next sector number in the file is returned by #POINT, which equals 0
|
||||
if this sector is the end of the file. #BYTES returns the number of data
|
||||
bytes in the sector, which may range from 125 to 1.</p>
|
||||
|
||||
<p>Two other words are useful in this context. DATA.FIELD leaves the address,
|
||||
in the disk buffers, of the start of the sector. ?LAST leaves a false flag,
|
||||
plus the next sector number of the file, if the end of the file has not
|
||||
been reached. Otherwise a true flag is left on the stack.</p>
|
||||
|
||||
<p>Our final example, on screen 36, illustrates what it might take to list
|
||||
a file. Assuming that the value of DIR.ADDR has been set to point to the
|
||||
directory entry in the disk buffers, PRINT.FILE starts at the first sector
|
||||
of the file, and types #BYTES from the DATA.FIELD of the sector, until the
|
||||
last sector is reached.</p>
|
||||
|
||||
<p><b>FOR MORE INFO</b></p>
|
||||
|
||||
<p>Because of space limitations, we'll skip over exactly how one locates
|
||||
a specific directory entry. This could be done by simply DUMPing the contents
|
||||
of a disk block, or by actually accepting text from a user and performing
|
||||
a string match against the FMS directory. Other applications for this system,
|
||||
such as loading character fonts into memory and repairing 'damaged' files,
|
||||
can be obtained by writing to the author c/o Pink Noise Studios, P.0. Box
|
||||
785 Crockett, CA 94525. Please include a self-addressed, stamped envelope.</p>
|
||||
|
||||
<pre>----------------------------------------
|
||||
pink noise studios/fig-forth 1/82
|
||||
\ 30 extensions for others rfg20apr82
|
||||
: \ in @ c/l / 1+ c/l * in ! ;
|
||||
immediate \ from Henry Laxen
|
||||
: NOT 0= ;
|
||||
hex
|
||||
: MSBYTE 0 100 u/ swap drop ;
|
||||
: LSBYTE ff and ;
|
||||
: >< \ byteswap
|
||||
dup lsbyte 100 * swap msbyte + ;
|
||||
0 variable TOFLAG
|
||||
: TO 1 toflag ! ;
|
||||
: VAR <builds ,
|
||||
does> toflag @
|
||||
if ! else @ then 0 toflag ! ;
|
||||
decimal ;s
|
||||
----------------------------------------
|
||||
\ 31 fields in directory rfg18apr82
|
||||
0 variable DIR.ADDR
|
||||
\ points to directory entry in buffers
|
||||
: FIELDER <builds c, \ offset into field
|
||||
does> c@ dir.addr @ + \ compute addr
|
||||
toflag @ if ! else @ then 0 toflag ! ;
|
||||
0 fielder FLAG.BYTE
|
||||
1 fielder SECTOR.COUNT
|
||||
3 fielder START.SECTOR
|
||||
: NAME.FIELD dir.addr @ 5 + ;
|
||||
;s
|
||||
----------------------------------------
|
||||
\ 32 utilities for DIR rfg18apr82
|
||||
: ?NULLED \ return true if nulled out
|
||||
flag.byte lsbyte dup 80 =
|
||||
swap 0= or sector.count 0= or ;
|
||||
hex
|
||||
: PNAME
|
||||
name.field dup 8 type 2e emit
|
||||
8 + 3 type ;
|
||||
0 variable #SEC
|
||||
: BUMPSEC \ increment total and print
|
||||
sector.count dup #sec +! 4 .r ;
|
||||
decimal
|
||||
: .USED \ according to VTOC
|
||||
359 block 3 + @ 4 .r
|
||||
," sectors available " cr ;
|
||||
;s
|
||||
----------------------------------------
|
||||
pink noise studios/fig-forth 1/82
|
||||
\ 33 directory of FMS disks rfg18apr82
|
||||
decimal
|
||||
: DIR 0 #sec ! cr
|
||||
368 360 \ directory sectors
|
||||
do i block dup b/buf + swap
|
||||
do i dir.addr !
|
||||
?nulled not
|
||||
if pname bumpsec cr then
|
||||
16 +loop
|
||||
loop cr #sec @ 4 .r
|
||||
." sectors used by files " cr .used ;
|
||||
;s
|
||||
----------------------------------------
|
||||
\ 34 fields in sectors rfg18apr82
|
||||
decimal
|
||||
0 variable SECTOR
|
||||
: DATA <builds c,
|
||||
does> c@ sector @ 1- block +
|
||||
toflag @
|
||||
if ! else @ then 0 toflag ! ;
|
||||
125 data FILE
|
||||
125 data POINTER
|
||||
127 data BCOUNT
|
||||
hex
|
||||
\ below return values
|
||||
: #FILE file lsbyte 4 / ;
|
||||
: #POINT pointer >< 3ff and ;
|
||||
: #BYTES bcount 7f and 7d min ;
|
||||
\above accounts for short sectors
|
||||
;s
|
||||
----------------------------------------
|
||||
\ 35 dos access utilities rfg18apr82
|
||||
: DATA.FIELD \ first storage location
|
||||
sector @ 1- block ;
|
||||
: ?LAST #point -dup 0= ;
|
||||
\ leave true or false + link
|
||||
\ to next sector
|
||||
----------------------------------------
|
||||
pink noise studios/fig-forth 1/82
|
||||
\ 36 printing a file rfg18apr82
|
||||
\ assumes dir.addr points to
|
||||
\ directory entry in buffers
|
||||
: PRINT.FILE
|
||||
start.sector sector !
|
||||
begin data.field #bytes type
|
||||
?last not
|
||||
while sector !
|
||||
repeat ;
|
||||
----------------------------------------</pre>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</td><td style="width:330px; min-width:330px; vertical-align:top; zoom:1; ">
|
||||
<div id="sideadplaceholder" style=" width:340px; min-width:340px;">
|
||||
|
||||
</div>
|
||||
|
||||
</td></tr></tbody></table>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div style="display: none">
|
||||
|
||||
<!--[if !IE]-->
|
||||
<script type="text/javascript">
|
||||
var adcountoffset=0;
|
||||
var aheightoffset=0;
|
||||
var aheightfactor=0;
|
||||
</script>
|
||||
|
||||
<!--[endif]-->
|
||||
<!--[if IE]>
|
||||
<script type="text/javascript">
|
||||
var adcountoffset=0;
|
||||
var aheightoffset=19;
|
||||
var aheightfactor=0.023;
|
||||
</script>
|
||||
<![endif]-->
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
var maxAds = 20;
|
||||
google_max_num_ads = 6;
|
||||
var elementId = "main_article";
|
||||
var col = document.getElementById(elementId); // determining the height of column to adjust number of ads
|
||||
var article_height=parseInt(col.offsetHeight-aheightoffset-((col.offsetHeight-aheightoffset)*aheightfactor)); //compensate for IE
|
||||
|
||||
if (col) // if defined, trying to calculate how many ads to show
|
||||
{
|
||||
var article_height=col.offsetHeight-aheightoffset;
|
||||
|
||||
var adHeight = 80;
|
||||
numberOfAds = Math.floor(article_height / adHeight);
|
||||
numberOfAds = parseInt(numberOfAds);
|
||||
|
||||
numberOfAds = ((numberOfAds+5+adcountoffset) >= maxAds) ? maxAds : (numberOfAds+5+adcountoffset); //limiting numberOfAds
|
||||
|
||||
google_max_num_ads=(numberOfAds > google_max_num_ads) ? numberOfAds : google_max_num_ads;
|
||||
|
||||
|
||||
}
|
||||
function google_ad_request_done(google_ads){
|
||||
var s = '<div style="width:330px; text-align:left;padding:25px 10px 0px 10px; line-height:15pt;" >';
|
||||
s += '<a href=\"' + google_info.feedback_url + '\" style="clear:both; margin-left:0px;margin-top:-15px;display:block;color:#666666;font-family:verdana,arial,sans-serif; text-decoration: none; font-weight:500; font-size:9pt;">Ads by Google</a><div>';
|
||||
var i;
|
||||
|
||||
if (google_ads.length == 0) {
|
||||
return;
|
||||
}
|
||||
if (google_ads[0].type == "flash") {
|
||||
s += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' +
|
||||
' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="' +
|
||||
google_ad.image_width +
|
||||
'" HEIGHT="' +
|
||||
google_ad.image_height +
|
||||
'"> <PARAM NAME="movie" VALUE="' +
|
||||
google_ad.image_url +
|
||||
'">' +
|
||||
'<PARAM NAME="quality" VALUE="high">' +
|
||||
'<PARAM NAME="AllowScriptAccess" VALUE="never">' +
|
||||
'<EMBED src="' +
|
||||
google_ad.image_url +
|
||||
'" WIDTH="' +
|
||||
google_ad.image_width +
|
||||
'" HEIGHT="' +
|
||||
google_ad.image_height +
|
||||
'" TYPE="application/x-shockwave-flash"' +
|
||||
' AllowScriptAccess="never" ' +
|
||||
' PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>';
|
||||
if(document.getElementById('topadholder')) {
|
||||
document.getElementById('topadholder').innerHTML = s;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
if (google_ads[0].type == "image") {
|
||||
|
||||
s += '<a href="' +
|
||||
google_ads[0].url +
|
||||
'" target="_top" title="go to ' +
|
||||
google_ads[0].visible_url +
|
||||
'" onmouseout="window.status=\'\'" onmouseover="window.status=\'go to ' +
|
||||
google_ads[0].visible_url +
|
||||
'\';return true"><img border="0" src="' +
|
||||
google_ads[0].image_url +
|
||||
'"width="' +
|
||||
google_ads[0].image_width +
|
||||
'"height="' +
|
||||
google_ads[0].image_height +
|
||||
'"></a>';
|
||||
if(document.getElementById('topadholder')) {
|
||||
document.getElementById('topadholder').innerHTML = s;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
if (google_ads[0].type == "html") {
|
||||
s += google_ads[0].snippet;
|
||||
|
||||
if(document.getElementById('topadholder')) {
|
||||
document.getElementById('topadholder').innerHTML = s;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (google_ads.length == 1) {
|
||||
s += '<a style="line-height:18pt; letter-spacing: 2px; color:blue;font-family:verdana,arial,sans-serif;" href="' +
|
||||
google_ads[0].url +
|
||||
'" onmouseout="window.status=\'\'" onmouseover="window.status=\'go to ' +
|
||||
google_ads[0].visible_url +
|
||||
'\';return true"> <span style="font-size:18pt;font-weight:bold;"> ' +
|
||||
google_ads[0].line1 +
|
||||
'</span></a> <span style="line-height:18pt; letter-spacing: 2px; text-decoration:none;color:#0e0e0e;font-family:verdana,arial,sans-serif;font-size:14pt;font-weight:400;"> - ' +
|
||||
google_ads[0].line2 +
|
||||
' ' +
|
||||
google_ads[0].line3 +
|
||||
'</span><br /><span><a style="color:blue;letter-spacing: 1.5px;font-size:13pt;font-weight:400;text-decoration:none;font-family:verdana,arial,sans-serif;" href="' +
|
||||
google_ads[0].url +
|
||||
'" onmouseout="window.status=\'\'" onmouseover="window.status=\'go to ' +
|
||||
google_ads[0].visible_url +
|
||||
'\';return true">' +
|
||||
google_ads[0].visible_url +
|
||||
'</span></a><br>';
|
||||
if(document.getElementById('topadholder')) {
|
||||
document.getElementById('topadholder').innerHTML = s;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (google_ads.length > 1) {
|
||||
var s1 = '<div style="display: block; min-width:800px; text-align:left;padding:25px 10px 10px 20px;line-height:9.5pt;clear:both;" >';
|
||||
s1 += '<a href=\"' + google_info.feedback_url + '\" style="clear:both;margin-left:0px;margin-top:-15px;position:absolute;display:block;color:#666666;font-family:verdana,arial,sans-serif; text-decoration: none; font-weight:500; font-size:9pt;">Ads by Google</a><div>';
|
||||
|
||||
for (i = 0; i < 5; ++i) {
|
||||
s1 += '<div style="display: block; margin-right:2px;">';
|
||||
s1 += '<a style="letter-spacing: 1.5px;color:blue;font-family:verdana,arial,sans-serif;font-size:10pt;font-weight:bold;" href="' +
|
||||
google_ads[i].url +
|
||||
'" onmouseout="window.status=\'\'" onmouseover="window.status=\'go to ' +
|
||||
google_ads[i].visible_url +
|
||||
'\';return true">' +
|
||||
google_ads[i].line1 +
|
||||
'</a> <span style="text-decoration:none;letter-spacing: 1.5px;color:#0e0e0e;font-family:verdana,arial,sans-serif;font-size:10pt;font-weight:400;">' +
|
||||
google_ads[i].line2 +
|
||||
' ' +
|
||||
google_ads[i].line3 +
|
||||
'</span> <span><a style="line-height:normal;color:blue;letter-spacing: 1.2px;font-size:9pt;font-weight:400;text-decoration:none;font-family:verdana,arial,sans-serif;" href="' +
|
||||
google_ads[i].url +
|
||||
'" onmouseout="window.status=\'\'" onmouseover="window.status=\'go to ' +
|
||||
google_ads[i].visible_url +
|
||||
'\';return true">' +
|
||||
google_ads[i].visible_url +
|
||||
'</span></a>';
|
||||
s1 += "</div><br />"
|
||||
|
||||
}
|
||||
|
||||
if(document.getElementById('topadholder')) {
|
||||
document.getElementById('topadholder').innerHTML = s1;
|
||||
}
|
||||
if (google_ads.length>5)
|
||||
{
|
||||
s2=s;
|
||||
|
||||
for (i = 5; i < google_ads.length; ++i) {
|
||||
|
||||
s2 += '<div style="margin-right:2px;">';
|
||||
s2 += '<a style="color:blue;font-family:courier new,verdana;font-size:12pt;font-weight:bold;" href="' +
|
||||
google_ads[i].url +
|
||||
'" onmouseout="window.status=\'\'" onmouseover="window.status=\'go to ' +
|
||||
google_ads[i].visible_url +
|
||||
'\';return true">' +
|
||||
google_ads[i].line1 +
|
||||
'</a><br /><span style="text-decoration:none;letter-spacing: 1.5px;color:#0e0e0e;font-family:verdana,arial,sans-serif;font-size:10pt;font-weight:400;">' +
|
||||
google_ads[i].line2 +
|
||||
' ' +
|
||||
google_ads[i].line3 +
|
||||
'</span> <span><a style="line-height:normal;color:blue;letter-spacing: 1.2px;font-size:9pt;font-weight:400;text-decoration:none;font-family:verdana,arial,sans-serif;" href="' +
|
||||
google_ads[i].url +
|
||||
'" onmouseout="window.status=\'\'" onmouseover="window.status=\'go to ' +
|
||||
google_ads[i].visible_url +
|
||||
'\';return true">' +
|
||||
google_ads[i].visible_url +
|
||||
'</span></a><br /><br />';
|
||||
s2 += "</div>";
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(document.getElementById('sideadplaceholder')) {
|
||||
document.getElementById('sideadplaceholder').innerHTML = s2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
google_ad_output = 'js';
|
||||
google_feedback = 'on';
|
||||
google_ad_client = "pub-0754410284344153";
|
||||
google_alternate_color = "FFFFFF";
|
||||
google_ad_channel ="1234567886";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "FFFFFF";
|
||||
google_color_bg = "FFFFFF";
|
||||
google_color_link = "0000EE";
|
||||
google_color_url = "0000EE";
|
||||
google_color_text = "000000";
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<ul>
|
||||
<li><a href="javascript:history.back()">Back to previous page</a>
|
||||
</li><li><a href="https://www.atarimagazines.com/index/?issue=v1n2">View this issue's table of contents</a>
|
||||
</li></ul>
|
||||
|
||||
|
||||
<protonpass-root-b2d3 data-protonpass-role="root" data-protonpass-theme="dark"><template shadowrootmode="closed"></template></protonpass-root-b2d3></body></html>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
5
print/scripts/badge-resize-pbm.sh
Normal file
@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
convert badge-light.png -monochrome -dither None -resize 300% badge-light.pbm
|
||||
convert badge-medium.png -monochrome -dither None -resize 300% badge-medium.pbm
|
||||
convert badge-heavy.png -monochrome -dither None -resize 300% badge-heavy.pbm
|
||||
3
print/scripts/resize-pbm.sh
Normal file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env zsh
|
||||
#
|
||||
for f in *.png; do convert "$f" -monochrome -dither None -resize 300% "${f%.png}.pbm"; done
|
||||