home *** CD-ROM | disk | FTP | other *** search
/ A.N.A.L.O.G. Magazine 1988 December / 88_dec.atr / check.act < prev    next >
Text File  |  2023-02-26  |  5KB  |  1 lines

  1. ¢;  CHECK.ACT¢; Steven Yates¢;   12/02/85¢¢;      CHECKSUM DATA¢;[9E 43 B1 2D 74 DD 67 7C ¢; 13 30 E5 8F 7A CA C9 77 ¢; AD AE 96 44 B0 F8 99 39 ¢; EB ]¢¢BYTE StartChar,CurChar,Count,X,¢     Flag=[0],Character,Sum,ISum,¢     Product,Key,Case=[0],Column=1152,¢     Sensitive=[1],Lines,SumLine,¢     WrongLine,Segment=[0],String=[1],¢     SubString=[2],Space=[32]¢CARD StartLine,Line=1160,¢     FirstLine=1156¢BYTE ARRAY Sums(256)¢CARD ARRAY SumLines(32)¢BYTE POINTER Length¢CARD POINTER CurLine,NextLine,¢             WrongSum¢¢DEFINE is="=", not="<>", Done="Flag=1"¢¢PROC End_Of_Line()¢¢  DO¢    CurLine=NextLine^¢    CurChar=7¢    Length=CurLine+6¢    NextLine=CurLine+4¢    IF CurLine=0 THEN¢      EXIT¢    FI¢    UNTIL Length^>0¢  OD¢¢RETURN¢¢PROC Quotes()¢¢  IF Segment is String THEN¢    Segment=0¢  ELSE¢    Segment=String¢  FI¢¢RETURN¢¢PROC Ignore()¢¢  X==-1¢  Count==-1¢  Character=0¢¢RETURN¢¢PROC Check_Line()¢¢  Character=Peek(CurLine+CurChar)¢  IF Segment is SubString THEN¢    Segment=0¢  ELSEIF Character='" THEN¢    Quotes()¢  ELSEIF Segment is String THEN¢  ELSEIF Character='' THEN¢    Segment is SubString¢  ELSEIF Character is Space THEN¢    Ignore()¢  ELSEIF Character='; THEN¢    Ignore()¢    CurChar=Length^+6¢  ELSEIF Case not Sensitive AND¢         Character>96 AND¢         Character<123 THEN¢    Character==-32¢  FI¢  Product=(X*Character) RSH Case¢  Sum==+Product¢  CurChar==+1¢  X==+1¢  IF X=4 THEN¢    X=1¢  FI¢¢RETURN¢¢PROC Find_Sums()¢¢  DO¢    DO¢      Character=Peek(CurLine+CurChar)¢      IF Character not '; THEN¢        End_Of_Line()¢      ELSEIF Length^>1 THEN¢        EXIT¢      ELSE¢        End_Of_Line()¢      FI¢      IF CurLine=0 THEN¢        Done¢        EXIT¢      FI¢    OD¢    CurChar=8¢    Character=Peek(CurLine+CurChar)¢    IF Character is '[ THEN¢      EXIT¢    FI¢    IF Done THEN¢      PrintE("Listing does not")¢      PrintE("contain checksums.")¢      PutE()¢      PrintE("Cannot CHECK!")¢      EXIT¢    FI¢    End_Of_Line()¢  OD¢¢RETURN¢¢PROC Get_Sums()¢¢ BYTE I¢ BYTE ARRAY Hex(1)¢¢  Find_Sums()¢  SumLine=0¢  DO¢    IF Done THEN¢      EXIT¢    FI¢    SumLines(SumLine)=CurLine¢    CurChar=9¢    FOR ISum=0 TO 7 DO¢      FOR I=0 TO 1 DO¢        Hex(I)=Peek(CurLine+CurChar+I)¢        IF Hex(I)>='A THEN¢          Hex(I)==-('A-'9-1)¢        FI¢        Hex(I)==-'0¢      OD¢      Sum=(Hex(0) LSH 4)+Hex(1)¢      Sums(SumLine*8+ISum)=Sum¢      IF Peek(CurLine+CurChar+3) is ']¢       THEN¢        Done¢        EXIT¢      FI¢      CurChar==+3¢    OD¢    End_Of_Line()¢    IF Done THEN¢      Flag=0¢      EXIT¢    FI¢    SumLine==+1¢  OD¢¢RETURN¢¢PROC Mistyped()¢¢  Line=StartLine¢  Column=StartChar¢  PrintE("Return to editor and check")¢  Print("the ")¢  PrintB(Lines)¢  PrintE(" lines following the line")¢  Print("the cursor is on for a ")¢  PrintE("typo.")¢¢RETURN¢¢PROC Bad_Sum()¢¢ BYTE I¢¢  IF Case is Sensitive THEN¢    Print("If article does not ")¢    PrintE("specify")¢    Print("case sensitive, use ")¢    PrintE("option")¢    Print("command to set this to ")¢    PrintE("no.")¢    PutE()¢    PutE()¢  FI¢  WrongLine=ISum/8¢  Sum=ISum&7¢  WrongSum=SumLines(WrongLine)+9+Sum*3¢  WrongSum^==%$8080¢  FOR I=0 TO SumLine DO¢    PrintE(SumLines(I)+6)¢  OD¢  WrongSum^==!$8080¢  PutE()¢  Print("Is highlighted sum correct?")¢  Key=GetD(1)¢  Key==%32¢  PutE()¢  PutE()¢  IF Key='y THEN¢    Mistyped()¢  ELSE¢    Print("Return to editor and ")¢    PrintE("correct")¢    PrintE("mistyped sum.")¢    Line=SumLines(WrongLine)¢    Column=(Sum+1)*3¢  FI¢¢RETURN¢¢PROC No_Problems()¢¢  PrintE("Program CHECKs out fine.")¢  PrintE("Save program and use")¢  PrintE("according to directions")¢  PrintE("in the article.")¢  Done¢¢RETURN¢¢PROC Check_Sum()¢¢  IF Sum<>Sums(ISum) THEN¢    Bad_Sum()¢    Done¢  FI¢  ISum==+1¢¢RETURN¢¢PROC Initialize()¢¢  IF Peek(1226)=255 THEN¢    Case is Sensitive¢  FI¢  X=1¢  CurLine=FirstLine¢  Length=CurLine+6¢  NextLine=CurLine+4¢  IF Length^=0 THEN¢    End_Of_Line()¢  FI¢  CurChar=7¢  Close(1)¢  Open(1,"K:",4,0)¢¢RETURN¢¢PROC D_Check()¢¢  Initialize()¢  Get_Sums()¢  ISum=0¢  DO¢    IF Done THEN¢      EXIT¢    FI¢    Sum=0¢    Lines=0¢    FOR Count=0 TO 127 DO¢      IF Count=0 THEN¢        StartLine=CurLine¢        StartChar=CurChar-6¢      FI¢      Check_Line()¢      IF CurChar=Length^+7 THEN¢        End_Of_Line()¢        IF CurLine=0 THEN¢          Check_Sum()¢          IF Done THEN¢            EXIT¢          FI¢          No_Problems()¢          EXIT¢        FI¢        Lines==+1¢      FI¢    OD¢    IF Done THEN¢      EXIT¢    FI¢    Check_Sum()¢  OD¢  Close(1)¢¢RETURN¢¢