NULMODEM pseudo code


De nu volgende pseudo code kan gebruikt worden om het DamExchange laag 1 NULMODEM protocol in een damprogramma in te bouwen. Code om tijdens doorrekenen in de tijd van de tegenstander te testen of via de seriële poort een zet binnen komt van de andere computer is hier niet opgenomen. Ook is hier geen code opgenomen om een damprogramma tussentijds te laten eindigen door bijvoorbeeld een toetsaanslag, een muisklik of een commando.

 

zendteken(teken)
  // zend een teken en wacht op terugontvangst
  // return 1 als hetzelfde teken is terugontvangen
  // return 0 als een ander teken, of geen teken is terugontvangen
  verzend teken naar COM poort
  als dit een fout geeft, return dan 0
  lees in een wachtlus wat op de COM poort binnenkomt
  als deze wachtlus 5 seconden niets binnenkrijgt, return dan 0
  als het lezen van de COM poort fout gegaan is, return dan 0
  als het ontvangen teken niet gelijk is aan het verzonden teken, return dan 0
  als alles wel in orde is, return dan 1

 

ontvangteken()
  // wacht op ontvangst van een teken, en zend dit terug
  // return het ontvangen teken als alles in orde is
  // return 0 als iets fout is
  lees in een oneindige wachtlus wat op de COM poort binnenkomt
  als dit lezen fout gaat, return dan 0
  verzend het ontvangen teken naar de COM poort
  als het verzenden een fout geeft, return dan 0
  als alles in orde is, return dan het ontvangen teken

 

ontvangbuffer()
  // ontvang alle zetinformatie en plaats deze (zonder S en E) in berichtbuffer
  // de berichtbuffer is maximaal 128 posities: 127 (bericht) + eind '\0'
  // return 1 als alles goed verloopt
  // return 0 als buffer overflow
startallesopnieuw:
  als ontvangteken() != 'S' ga naar startallesopnieuw
herstart:
  i = 0
  doe
    teken = ontvangteken()
    als teken == 0 ga naar startallesopnieuw
    als teken == 'S' ga naar herstart
    als teken == 'E' dan berichtbuffer[ i ] = '\0'
    anders berichtbuffer[ i ] = teken
    i = i + 1
  totdat teken == 'E' of i > 127
  als teken == 'E' dan return 1
  anders return 0

 

zendbuffer()
  // verzend de zet in berichtbuffer
opnieuw:
  rc = zendteken( 'S' )
  als rc == 0 ga naar opnieuw
  i = 0
volgende:
  als berichtbuffer[ i ] == '\0' ga naar bufferverzonden
  rc = zendteken( berichtbuffer[ i ] )
  als rc == 0 ga naar opnieuw
  i = i + 1
  ga naar volgende
bufferverzonden:
  rc = zendteken( 'E' )
  als rc == 0 ga naar opnieuw
  // anders klaar met verzenden berichtbuffer

DamExchange Home